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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

HDU1824 2-sat

發(fā)布時(shí)間:2025/3/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU1824 2-sat 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Let's go home

Time Limit: 10000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1926????Accepted Submission(s): 812


Problem Description 小時(shí)候,鄉(xiāng)愁是一枚小小的郵票,我在這頭,母親在那頭。
????????????????????????—— 余光中

集訓(xùn)是辛苦的,道路是坎坷的,休息還是必須的。經(jīng)過一段時(shí)間的訓(xùn)練,lcy決定讓大家回家放松一下,但是訓(xùn)練還是得照常進(jìn)行,lcy想出了如下回家規(guī)定,每一個(gè)隊(duì)(三人一隊(duì))或者隊(duì)長(zhǎng)留下或者其余兩名隊(duì)員同時(shí)留下;每一對(duì)隊(duì)員,如果隊(duì)員A留下,則隊(duì)員B必須回家休息下,或者B留下,A回家。由于今年集訓(xùn)隊(duì)人數(shù)突破往年同期最高記錄,管理難度相當(dāng)大,lcy也不知道自己的決定是否可行,所以這個(gè)難題就交給你了,呵呵,好處嘛~,免費(fèi)**漂流一日。

?

Input 第一行有兩個(gè)整數(shù),T和M,1<=T<=1000表示隊(duì)伍數(shù),1<=M<=5000表示對(duì)數(shù)。
接下來有T行,每行三個(gè)整數(shù),表示一個(gè)隊(duì)的隊(duì)員編號(hào),第一個(gè)隊(duì)員就是該隊(duì)隊(duì)長(zhǎng)。
然后有M行,每行兩個(gè)整數(shù),表示一對(duì)隊(duì)員的編號(hào)。
每個(gè)隊(duì)員只屬于一個(gè)隊(duì)。隊(duì)員編號(hào)從0開始。

?

Output 可行輸出yes,否則輸出no,以EOF為結(jié)束。

?

Sample Input 1 2 0 1?2 0 1 1 2 2 4 0 1 2 3 4 5 0 3 0 4 1 3 1 4

?

Sample Output yes no

?

Author 威士忌 代碼: //i表示留下,i+1表示回家,若a,b,c表示隊(duì)員,則有(a*2,b*2+1),(a*2,c*2+1),(b*2+1,a*2),(c*2+1,a*2) //(b*2,c*2),(c*2,b*2);(a*2+1,b*2),(a*2+1,c*2),(b*2+1,a*2),(c*2+1,a*2),(b*2+1,c*2+1),(c*2+1,b*2+1) //建12條邊。若a,b不能同時(shí)留下則有(a*2,b*2+1),(b*2,a*2+1),因?yàn)閍,b都可以回去所以沒有反向邊。然后套模板。 #include<iostream> #include<cstdio> #include<cstring> #include<vector> using namespace std; const int maxn=3003; /********************** 2-sat模板 **********************/ 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<(int)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));}void add_clause(int x,int xval,int y,int yval){//這個(gè)函數(shù)隨題意變化x=x*2+xval;y=y*2+yval;g[x].push_back(y);}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;} }; /*********************** 2-sat模板 ************************/ int main(){int n,m,a,b,c;Twosat solver;while(scanf("%d%d",&n,&m)==2){solver.init(3*n);for(int i=0;i<n;i++){scanf("%d%d%d",&a,&b,&c);solver.add_clause(a,0,b,1);solver.add_clause(a,0,c,1);solver.add_clause(b,0,a,1);solver.add_clause(b,0,c,0);solver.add_clause(c,0,a,1);solver.add_clause(c,0,b,0);solver.add_clause(a,1,b,0);solver.add_clause(a,1,c,0);solver.add_clause(b,1,a,0);solver.add_clause(b,1,c,1);solver.add_clause(c,1,a,0);solver.add_clause(c,1,b,1);}for(int i=0;i<m;i++){scanf("%d%d",&a,&b);solver.add_clause(a,0,b,1);solver.add_clause(b,0,a,1);}if(solver.solve()) printf("yes\n");else printf("no\n");}return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/--ZHIYUAN/p/6364973.html

總結(jié)

以上是生活随笔為你收集整理的HDU1824 2-sat的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。