日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

训练指南 UVALive - 3713 (2-SAT)

發布時間:2025/3/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 训练指南 UVALive - 3713 (2-SAT) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

layout: post
title: 訓練指南 UVALive - 3713 (2-SAT)
author: "luowentaoaa"
catalog: true
mathjax: true
tags:
- 2-SAT
- 圖論
- 訓練指南


Astronauts

UVALive - 3713

題意

有A,B,C三個任務要分配個N個宇航員,每個宇航員恰好要分配一個任務,設平均年齡為X,只有年齡大于或等于X的宇航員才能分配任務A。只有年齡嚴格小于X的宇航員才能分配任務B。而任務C沒有限制。有M對宇航員相互討厭,因此不能分配到同一任務。編程找出一個滿足上述所有要求的任務分配方案。

題解

如果憎惡就代表不能一起去C,如果年齡相同就代表不能一起去A/B;

#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod=998244353; const int maxn=1e6+50; const ll inf=0x3f3f3f3f3f3f3f3fLL; struct TwoSAT{int n;vector<int> G[maxn*2];bool mark[maxn*2];int S[maxn*2],c;bool dfs(int x){if(mark[x^1])return false;if(mark[x])return true;mark[x]=true;S[c++]=x;for(int i=0;i<G[x].size();i++)if(!dfs(G[x][i]))return false;return true;}void init(int n){this->n=n;for(int i=0;i<n*2;i++)G[i].clear();memset(mark,0,sizeof(mark));}/// x=xval or y= yval;void add_caluse(int x,int xval,int y,int yval){x=x*2+xval;y=y*2+yval;G[x^1].push_back(y);///如果x為真 那么y必須為假;G[y^1].push_back(x);///如果y為真 那么x必須為假;}bool solve(){for(int i=0;i<n*2;i+=2)if(!mark[i]&&!mark[i+1]){c=0;if(!dfs(i)){while(c>0)mark[S[--c]]=false;if(!dfs(i+1))return false;}}return true;} }; int n,a[maxn],m; TwoSAT solver; int tol; int is_young(int x){return a[x]*n<tol; } int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);while(cin>>n>>m&&n&&m){tol=0;solver.init(n);for(int i=0;i<n;i++){cin>>a[i];tol+=a[i];}for(int i=0;i<m;i++){int a,b;cin>>a>>b;a--;b--;solver.add_caluse(a,1,b,1);if(is_young(a)==is_young(b))solver.add_caluse(a,0,b,0);}if(!solver.solve())cout<<"No solution."<<endl;else for(int i=0;i<n;i++)if(solver.mark[i*2])cout<<"C"<<endl;else if(is_young(i))cout<<"B"<<endl;else cout<<"A"<<endl;}return 0; }

轉載于:https://www.cnblogs.com/luowentao/p/10343539.html

總結

以上是生活随笔為你收集整理的训练指南 UVALive - 3713 (2-SAT)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。