hdu1213依旧并查集。求集合的个数

#include<iostream>
#include<set>
using namespace std;

const int MAXN=1003;

int u[MAXN];

int find(int p)
{
    if(p==u[p])
    {
        return u[p];
    }else
    {
        return u[p]=find(u[p]);
    }
}
void connect(int a,int b)
{
    int f1=find(a);
    int f2=find(b);
    if(f1<f2)
    {
        u[f2]=f1;
    }else
    {
        u[f1]=f2;
    }
}
void init()
{
    int i=0;
    for(i=0;i<=MAXN-1;i++)
    {
        u[i]=i;
    }
}
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        set<int>s;
        int n,m;
        int i;
        init();
        cin>>n>>m;
        while(m--)
        {
            int n1,n2;
            cin>>n1>>n2;
            connect(n1,n2);
        }
        for(i=n;i>=1;i--)
        {
            s.insert(find(i));
        }
        cout<<s.size()<<endl;
    }
    return 0;
}

  

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