hdu 1232 借助这题学习了下并查集的路径压缩

#include"stdio.h"

int n,m,fa[1005];

int find(int w)
{
    int    temp=w;//并查集的路径压缩
    while(temp!=fa[temp])
        temp=fa[temp];
    fa[w]=temp;
    return temp;
}

int cal()
{
    int i,sum=0,a,b,x,y;
    for(i=0;i<=n;i++)
        fa[i]=i;
    for(i=0;i<m;i++)
    {
        scanf("%d%d",&x,&y);
        a=find(x);
        b=find(y);
        if(a!=b)
        {
            sum++;
            fa[b]=a;
        }
    }
    return sum;
}

int main( )
{
    int s;
    while(scanf("%d",&n)&&n!=0)
    {
        scanf("%d",&m);
        s=n-1-cal();
        if(s<0)
            printf("0\n");
        else
            printf("%d\n",s);
    }
    return 0;
}
        


    
原文地址:https://www.cnblogs.com/chaosheng/p/2682445.html