我是百度的 嗯 并查集已经忘了 现在复习下
#include <cstdio>
const int MAX = 20010;
int frien[MAX];
int find(int x)
{
if(x != frien[x])
frien[x] = find(frien[x]);
return frien[x];
}
int main()
{
int n;
int i;
int a,b,c;
while(scanf("%d",&n)!=EOF)
{
for(i = 0;i < 2*n; i++)
{
frien[i] = i;
}
while(scanf("%d %d %d",&c,&a,&b),c||a||b)
{
int f1 = find(a);
int f2 = find(b);
int e1 = find(a+n);
int e2 = find(b+n);
if(c == 1)//朋友
{
if(f1 == e2) //f1集合的敌人是e2集合 那么ab不可能是朋友 输出-1
{
puts("-1");
continue;
}
frien[f1] = f2;
frien[e1] = e2;
}
else if(c == 2)
{
if(f1 == f2)//ab是朋友 他们不可能是敌人 矛盾
{
puts("-1");
continue;
}
frien[f1] = e2;
frien[e1] = f2;
}
else if(c == 3)
{
if(f1 == f2)
puts("1");
else
puts("0");
}
else
{
if(f1 == e2)
puts("1");
else
puts("0");
}
}
}
return 0;
}
/*
10
1 0 1
1 1 2
2 0 5
3 0 2
3 8 9
4 1 5
4 1 2
4 8 9
1 8 9
1 5 2
3 5 2
0 0 0
*/