题目地址:http://ac.jobdu.com/problem.php?cid=1040&pid=68
C语言源码:
#include<stdio.h>
#define maxsize 1010
int Tree[maxsize];
int findroot(int x)
{
int temp;
if(Tree[x]==-1)
return x;
else
{
temp=findroot(Tree[x]);
Tree[x]=temp;
return temp;
}
}
int main()
{
int t,n,m,a,b,i,num;
while(scanf("%d",&t)!=EOF)
{
while(t--)
{
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
Tree[i]=-1;
while(m--)
{
scanf("%d %d",&a,&b);
a--;
b--;
a=findroot(a);
b=findroot(b);
if(a!=b)
Tree[b]=a;
}
num=0;
for(i=0;i<n;i++)
if(Tree[i]==-1)
num++;
printf("%d\n",num);
}
}
}
本文提供了一个使用C语言实现的并查集算法示例,该算法主要用于解决图论中的连通性问题。通过递归查找根节点并进行路径压缩优化,确保了较高的查找效率。代码中详细展示了如何初始化并查集、如何执行合并操作以及如何统计独立集合的数量。
5458

被折叠的 条评论
为什么被折叠?



