(http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=12648)
/*
输入:
1 2
3 4
3 5
3 1
2 3
4 1
2 6
6 5
输出:
-1
*/
#include<stdio.h>
const int maxn=10000+10;
int fa[maxn];
//并查集的查找,自带压缩路径
int findset(int x)
{
//return x!=fa[x]?fa[x]=findset(fa[x]):x;
if(x!=fa[x])
return fa[x]=findset(fa[x]);
else
return x;//return fa[x];
}
int main()
{
int x,y;
while(scanf("%d",&x)==1)
{
for(int i=0;i<=maxn;i++)
fa[i]=i;
int refusals=0;
while(x!=-1)
{
scanf("%d",&y);
x=findset(x);
y=findset(y);
if(x==y)
{
refusals++;
printf(" 父节点相同\n");
}
else
{
fa[x]=y;
printf("%d的父节点为%d\n",x,y);
}
scanf("%d",&x);
}
printf("%d",refusals);
}
return 0;
}