#include #include #include #include #include #include using namespace std; const int MAXN=22000; bool visit[MAXN]; queueq1,q2; vector >adj; vector >radj; vector >dag; int n,m,cnt; int id[MAXN],order[MAXN],ind[MAXN]; void dfs(int u) { visit[u]=true; int i,len=adj[u].size(); for(i=0;i=0;i--) if(!visit[order[i]]) { cnt++; rdfs(order[i]); } } bool solvable() { for(int i=0;ib[i])swap(a[i],b[i]); } adj.assign(2*n,vector()); radj.assign(2*n,vector()); bool flag=true; while(m--) { scanf("%d%d%d",&x,&y,&z); x--; y--; if(!flag)continue; if(x==y) { if(z==1)flag=false; continue; } if(z==0) { if(a[x]!=a[y]) { add(2*x,2*y+1); add(2*y,2*x+1); } if(a[x]!=b[y]) { add(2*x,2*y); add(2*y+1,2*x+1); } if(b[x]!=a[y]) { add(2*x+1,2*y+1); add(2*y,2*x); } if(b[x]!=b[y]) { add(2*x+1,2*y); add(2*y+1,2*x); } } else if(z==1) { if(a[x]==a[y]) { add(2*x,2*y+1); add(2*y,2*x+1); } if(a[x]==b[y]) { add(2*x,2*y); add(2*y+1,2*x+1); } if(b[x]==a[y]) { add(2*x+1,2*y+1); add(2*y,2*x); } if(b[x]==b[y]) { add(2*x+1,2*y); add(2*y+1,2*x); } } } if(!flag) { printf("Case #%d: no\n",iCase); continue; } korasaju(); if(solvable())printf("Case #%d: yes\n",iCase); else printf("Case #%d: no\n",iCase); } return 0; }