畅通工程(hdu 1232)

并查集入门题


#include<bits/stdc++.h>
using namespace std;
int father[1005];
void f(int x,int y)
{
    while(x!=father[x]) x=father[father[x]];
    while(y!=father[y]) y=father[father[y]];
    if(x!=y) father[x]=y;
}
int main()
{
    int n,m,a,b;
    while(scanf("%d",&n)==1&&n)
    {
        scanf("%d",&m);
        for(int i=1;i<=n;i++) father[i]=i;
        while(m--)
        {
            scanf("%d%d",&a,&b);
            if(a==b) continue;
            f(a,b);
        }
        int ans=0;
        for(int i=1;i<=n;i++)
            if(i==father[i]) ans++;
        printf("%d\n",ans-1);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41061455/article/details/80219557