Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 43132 | Accepted: 13257 |
Description
Input
Output
Sample Input
1 5 5 A 1 2 D 1 2 A 1 2 D 2 4 A 1 4
Sample Output
Not sure yet. In different gangs. In the same gang.
Source
#include<stdio.h> int father[150500],relation[150050]; void init(int n) { int i; for(i=1;i<=n;++i) father[i]=i; for(i=1;i<=n;++i) relation[i]=0; } int find(int x) { int t; if(x==father[x]) return (x); t=father[x]; father[x]=find(t); relation[x]=(relation[x]+relation[t])%2; return (father[x]); } void merge(int x,int y) { int find_x=find(x); int find_y=find(y); if(find_x!=find_y) { relation[find_x]=(relation[y]+1-relation[x]+2)%2; father[find_x]=find_y; } } int main() { int T,n,m,num=0;char c;int x,y; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); init(n); while(m--) { getchar(); scanf("%c%d%d",&c,&x,&y); if(c==‘D‘) { merge(x,y); }else if(c==‘A‘) { if(find(x)!=find(y)) { printf("Not sure yet.\n"); continue; }else if(relation[x]==relation[y]) { printf("In the same gang.\n"); continue; }else if(relation[x]!=relation[y]) printf("In different gangs.\n"); } } } return 0; }
[并查集] POJ 1703 Find them, Catch them
原文:http://www.cnblogs.com/fuermowei-sw/p/6193533.html