HDU1232畅通工程

一道简单的并查集题目。

include

include

include

using namespace std;

int pre[1000];
int find(int x)
{
int r=x;
while(pre[r]!=r)
{
r=pre[r];
}
int i=x,j;
while(i!=r)
{
j=pre[i];
pre[i]=r;
i=j;
}
return r;
}
int main()
{
int m,n,l1,l2,f1,f2;
while(scanf(“%d”,&n)&&n)
{
int sum=n-1;
for(int i=1;i<=n;i++)
{
pre[i]=i;
}
scanf(“%d”,&m);
while(m–)
{
scanf(“%d %d”,&l1,&l2);
f1=find(l1),f2=find(l2);
if(f1!=f2)
{
pre[f2]=f1;
sum–;
}
}
printf(“%d\n”,sum);
}
return 0;
}

你可能感兴趣的:(并查集)