poj2492
题意:
实验给出:同性虫子不交流,异性交流。给出虫子的交流情况,判断是否符合实验。
题解:
对话用1表示(异性),不对话用0表示(同性)
x和y对话,y和z对话,则x和z不能对话,分别为1,1,0
x和y对话,y和z不对话,则x和z对话,分别为1,0,1
x和y不对话,y和z不对话,则x和z不对啊,分别为0,0,0
所以k3 = (k1 + k2)% 2
代码:
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
int const N = 1000000 + 10;
int T,n,m,fa[N],val[N];
int find(int x){
if(x != fa[x]){
int t = fa[x];
fa[x] = find(fa[x]);
val[x] ^= val[t];
}
return fa[x];
}
int main(){
int caser = 0;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
for(int i=0;i<=n;i++) fa[i] = i,val[i] = 0;
bool ans = true;
int x,y;
for(int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
int fx = find(x), fy = find(y);
if(fx != fy){
fa[fy] = fx;
val[fy] = val[x] ^ 1 ^ val[y];
}else{
if(ans && val[x] ^ val[y] == 0) ans = false;
}
}
printf("Scenario #%d:\n",++caser);
if(ans) printf("No suspicious bugs found!\n\n");
else printf("Suspicious bugs found!\n\n");
}
}