题意:给你N个人,他们之间有的是敌人,有的是朋友,让你判断给定的两个人是敌人还是友人。
方法:创建对立面,x1和y1是友人,则设计x2和y2是敌人,然后在进行判断:如果x1=y1说明是友人,如果x1=y2说明是敌人
// #include<iostream> #include<algorithm> #include<cstdio> #define max 11111*2 using namespace std; int far[max]; void init(int m) { for(int i=0; i<m; i++) far[i]=i; } int find_set(int x) { if(x==far[x]) return x; far[x]=find_set(far[x]); return far[x]; } int main() { int T; int c,a,b; int x1,x2,y1,y2; scanf("%d",&T); init(T*2); while(scanf("%d%d%d",&a,&b,&c)) { if(a+b+c==0) break; x1=find_set(b); x2=find_set(b+T); y1=find_set(c); y2=find_set(c+T); if(a==1) { if(x1==y2) { printf("-1\n"); continue; } far[x1]=y1; far[x2]=y2; } if(a==2) { if(x1==y1) { printf("-1\n"); continue; } far[x1]=y2; far[x2]=y1; } if(a==3) { if(x1==y1) printf("1\n"); else printf("0\n"); } if(a==4) { if(x1==y2) printf("1\n"); else printf("0\n"); } } return 0; }