hdu1232最水并查集模版题

求集合的个数

#include <cstdlib>
#include <iostream>
#include<stdio.h>
using namespace std;
const int MAXN=1003;
int p[MAXN];
int find(int i)
{
    if(p[i]!=i)
    {
        return p[i]=find(p[i]);
    }else
    {
        return i;
    }
}
void connect(int a,int b)
{
    int f1=find(a);
    int f2=find(b);
    if(f1>f2)
    {
        p[f1]=f2;
    }else if(f1<f2)
    {
        p[f2]=f1;
    }
}
int main(int argc, char *argv[])
{
    int n,m;
    while((cin>>n)&&(n!=0)&&(cin>>m))
    {
        int i=0;
        int sum=0;
        for(i=1;i<=n;i++)
        {
            p[i]=i;
        }
        for(i=0;i<=m-1;i++)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            connect(a,b);
        }

        for(i=n;i>=1;i--)
        {
            if(find(i)==i)
            {
                sum++;
            }
        }
        cout<<sum-1<<endl;
    }
    //system("PAUSE");
    return EXIT_SUCCESS;
}

  

posted @ 2012-07-26 10:41  77695  阅读(146)  评论(0编辑  收藏  举报