思路:
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 2005;
int N,M;
bool flag;
int par[maxn];
int val[maxn];
void INIT(){
flag = false;
memset(par , -1 , sizeof(par));
memset(val , 0 , sizeof(val));
return ;
}
int FIND(int i){
if(par[i] == -1)
return i;
int tp = par[i];
par[i] = FIND(par[i]);
val[i] = (val[i] + val[tp]) % 2;
return par[i];
}
void UNION(int l,int r,int parl,int parr){
par[parr] = parl;
val[parr] = (val[l] + 1 - val[r] + 2) % 2;
return ;
}
int main(){
int T;cin>>T;
for(int t = 1 ; t <= T ; t++){
INIT();
cin>>N>>M;
while(M--){
int l,r;
scanf("%d%d" , &l , &r);
if(flag)
continue;
int parl = FIND(l);
int parr = FIND(r);
if(parl == parr){
if(val[l] == val[r])
flag = true;
}
else
UNION(l , r , parl , parr);
}
printf("Scenario #%d:\n" , t);
if(flag)
printf("Suspicious bugs found!\n\n");
else
printf("No suspicious bugs found!\n\n");
}
return 0;
}