hdu 1232 畅通工程

原题链接:点我转移

这个题,就是一个快乐并查集,看根的个数,减去一就行。

#include<iostream>
using namespace std;
int bin[1010];
int find(int x)
{
    int px=x;
    while(px!=bin[px])
        px=bin[px];
    return px;
}
void merge(int x,int y)
{
    int fx=find(x);
    int fy=find(y);
    if(fx!=fy)
        bin[fx]=fy;
}
int main()
{
    int m,n,x,y;
    while(cin>>n&&n)
    {
        for(int i=1;i<=n;i++)
            bin[i]=i;
        cin>>m;
        while(m--)
        {
            cin>>x>>y;
            merge(x,y);
        }
        int sum=-1;
        for(int i=1;i<=n;i++)
            if(bin[i]==i)
            sum++;
        cout<<sum<<endl;
    }
    return 0;
}

 

posted @ 2019-01-23 16:13  悲离  阅读(66)  评论(0编辑  收藏  举报