(2 sat) hdu 1824
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                (2 sat) hdu 1824
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                Let's go home
Time Limit: 10000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1523????Accepted Submission(s): 616
????????????????????????—— 余光中
集訓是辛苦的,道路是坎坷的,休息還是必須的。經(jīng)過一段時間的訓練,lcy決定讓大家回家放松一下,但是訓練還是得照常進行,lcy想出了如下回家規(guī)定,每一個隊(三人一隊)或者隊長留下或者其余兩名隊員同時留下;每一對隊員,如果隊員A留下,則隊員B必須回家休息下,或者B留下,A回家。由于今年集訓隊人數(shù)突破往年同期最高記錄,管理難度相當大,lcy也不知道自己的決定是否可行,所以這個難題就交給你了,呵呵,好處嘛~,免費**漂流一日。
?
Input 第一行有兩個整數(shù),T和M,1<=T<=1000表示隊伍數(shù),1<=M<=5000表示對數(shù)。接下來有T行,每行三個整數(shù),表示一個隊的隊員編號,第一個隊員就是該隊隊長。
然后有M行,每行兩個整數(shù),表示一對隊員的編號。
每個隊員只屬于一個隊。隊員編號從0開始。
?
Output 可行輸出yes,否則輸出no,以EOF為結束。?
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 威士忌?
Source HDOJ 2007 Summer Exercise(3)- Hold by Wiskey #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<cstdlib> #include<algorithm> #include<queue> #include<stack> #include<set> #include<map> using namespace std; stack<int> s; vector<int> e[7010]; int n,m,Dfs[7010],use[7010],low[7010],isstack[7010]; int top,newflag; void init() {memset(Dfs,0,sizeof(Dfs));memset(use,0,sizeof(use));memset(low,0,sizeof(low));memset(isstack,0,sizeof(isstack));top=0,newflag=0;for(int i=1;i<=6*n;i++)e[i].clear();while(!s.empty())s.pop(); } void tarjan(int u) {Dfs[u]=low[u]=++top;isstack[u]=1;s.push(u);for(int i=0;i<e[u].size();i++){int v=e[u][i];if(!Dfs[v]){tarjan(v);low[u]=min(low[u],low[v]);}else if(isstack[v])low[u]=min(low[u],Dfs[v]);}if(Dfs[u]==low[u]){newflag++;int x;do{x=s.top();s.pop();isstack[x]=0;use[x]=newflag;}while(x!=u);} } int main() {while(scanf("%d%d",&n,&m)!=EOF){init();for(int i=1;i<=n;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);a++,b++,c++;e[a+3*n].push_back(b);e[a+3*n].push_back(c);e[b+3*n].push_back(a);e[c+3*n].push_back(a);}for(int i=1;i<=m;i++){int a,b;scanf("%d%d",&a,&b);a++,b++;e[a].push_back(b+3*n);e[b].push_back(a+3*n);}for(int i=1;i<=6*n;i++){if(!Dfs[i])tarjan(i);}bool flag=true;for(int i=1;i<=6*n;i++){if(use[i]==use[i+n]){flag=false;break;}}if(flag)printf("yes\n");elseprintf("no\n");}return 0; }
轉載于:https://www.cnblogs.com/water-full/p/4531578.html
總結
以上是生活随笔為你收集整理的(2 sat) hdu 1824的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Eclipse 报java.lang.O
- 下一篇: 第二次 图书助手冲刺第一天
