题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232点击打开链接
题目描述:再添加多少条连接能使所有不相交集合相交。
解题思路:和那道化成多少堆的最水题一个道理,然后有N个集合的话,添加N-1条线就能把他们全连起来。
AC代码:
#include <cstdio>
#include <cstring>
int arr[1050];
int find(int x)
{
return arr[x]==x?x:find(arr[x]);
}
void mer(int a,int b)
{
int fa,fb;
fa=find(a);
fb=find(b);
arr[fa]=fb;
}
int main()
{
int i,n,m,from,to,ans;
while(scanf("%d",&n),n)
{
scanf("%d",&m);
ans=0;
memset(arr,0,sizeof(arr));
for(i=1;i<=n;i++)
arr[i]=i;
while(m--)
{
scanf("%d%d",&from,&to);
mer(from,to);
}
for(i=1;i<=n;i++)
if(arr[i]==i)ans++;
printf("%d\n",ans-1);
}
return 0;
}
AC截图: