训练五 并查集算法

1.目的要求:
(1)理解并查集算法划分集合的合理性
(2)理解路径压缩对并查集算法的优化
(3)利用并查集算法解决Online Judge上面的题目
2.实验内容:
(1)统计给定的各种数据所在的集合个数,存在联系的数据即为一个集合 -来源HDU1232
3.实验报告:
(1)

#include
const int MAXN=1010;
int F[MAXN];
int find(int t)
{
    if(F[t]==-1) return t;
    return F[t]=find(F[t]);
}    
void bing(int a,int b)
{
    int t1=find(a);
    int t2=find(b);
    if(t1!=t2) F[t1]=t2;
}    
int main()
{
    int n,m;

    while(scanf("%d",&n),n)
    {
        scanf("%d",&m);
        for(int i=1;i<=n;i++) F[i]=-1;
        int a,b;
        while(m--)
        {
            scanf("%d%d",&a,&b);
            bing(a,b);
        }    
        int res=0;
        for(int i=1;i<=n;i++)
          if(F[i]==-1) res++;
        printf("%d\n",res-1);
    }    
    return 0;
}    

你可能感兴趣的:(训练五 并查集算法)