hdu 1829 A Bugs Life

考察并查集,

如果2个数的根节点相同,说明他们在同一集合众,,检测他们是否是异性,若不是则有Bug

如果不相同,也判断一下他们是否异性,若不是,则将其中一个集合的性别翻转,再将其合并,否则直接合并

#include<iostream>#define maxn 2000+5using namespace std;int n,m,flag;int f[maxn];int sign[maxn];void ready(){for(int i=1;i<maxn;i++) f[i]=i,sign[i]=0;flag=1;}int dfs(int x){if(f[x]!=x) f[x]=dfs(f[x]);return f[x];}void change(int x){for(int i=1;i<=n;i++){if(dfs(x)==dfs(i)) sign[i]=sign[i]^1;}}void build(int x,int y){if(dfs(x)!=dfs(y)){if(sign[x]==sign[y]) change(y);f[dfs(x)]=dfs(y);}else{if(sign[x]==sign[y]) flag=0;}}int main(){cin.sync_with_stdio(false);int t,casee=1,x,y;cin>>t;while(t–){ready();cin>>n>>m;while(m–){cin>>x>>y;build(x,y);}cout<<"Scenario #"<<casee++<<":"<<endl;if(flag) cout<<"No suspicious bugs found!";else cout<<"Suspicious bugs found!";cout<<endl<<endl;}return 0;}

诚实是人生绝妙的法宝。虽然对人诚实,

hdu 1829 A Bugs Life

相关文章:

你感兴趣的文章:

标签云: