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;

}

  

你可能感兴趣的:(HDU)