您的位置:首页 > 其它

并查集

2016-07-19 20:46 357 查看
#include<iostream>#include<algorithm>using namespace std;int r[100005];int p[100005];int n,m;void init(){for(int i=0;i<=n;i++){p[i]=i;r[i]=0;}}int Find(int x){if(x!=p[x]){int k=Find(p[x]);r[x]=(r[x]+r[p[x]])%2;p[x]=k;}return p[x];}void UnionSet(int x,int y,int xx,int yy){p[yy]=xx;r[yy]=(r[x]+1-r[y]+2)%2;}int main(){int t;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);init();for(int i=0;i<m;i++){char s[10];int x,y;scanf("%s%d%d",s,&x,&y);int xx=Find(x);int yy=Find(y);//cout<<xx<<endl<<yy<<endl;if(s[0]=='A'){if(xx!=yy){printf("Not sure yet.\n");}else{if(r[x]==r[y]){printf("In the same gang.\n");}elseprintf("In different gangs.\n");}}else{if(xx!=yy){UnionSet(x,y,xx,yy);}}}}return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: