HDU 4751 Divide Groups 2-SAT(2013 ACM/ICPC Asia Regional Nanjing Online 1004)
彩笔请多指教!
转载请注明出处__谢谢! http://www.cnblogs.com/HaibaraAi/articles/3336673.html by---HaibaraAi 求认识大神(ˇ^ˇ),目前只会水题- -#~~~!
数据略水(︶︿︶)据说直接dfs更快了
1 #include <queue> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 #define INF 0x7fffffff 7 #define maxn 105 8 int n,m,ans; 9 int c[maxn]; 10 int mp[maxn][maxn]; 11 int bfs(int u){ 12 queue<int>q; 13 while(!q.empty()){q.pop();} 14 q.push(u); 15 while(!q.empty()){ 16 u=q.front();q.pop(); 17 for(int i=0;i<n;i++){ 18 if(u==i||mp[u][i]&&mp[i][u])continue; 19 if(c[i]==-1){ 20 c[i]=c[u]^1; 21 q.push(i); 22 } 23 else if(c[i]==c[u])return 1; 24 } 25 } 26 return 0; 27 } 28 int main(){ 29 while(~scanf("%d",&n)){ 30 memset(mp,0,sizeof mp); 31 memset(c,-1,sizeof c); 32 int i; 33 for(i=0;i<n;i++){ 34 int v; 35 while(scanf("%d",&v)&&v) 36 mp[i][v-1]=1; 37 } 38 for(i=0;i<n;i++){ 39 if(c[i]==-1){ 40 c[i]=0; 41 if(bfs(i))break; 42 } 43 } 44 if(i<n)printf("NO\n"); 45 else printf("YES\n"); 46 } 47 return 0; 48 }
浙公网安备 33010602011771号