HDU 1213

套并查集模板就ojbk
/*Sample Input
2
5 3
1 2
2 3
4 5

5 1
2 5
Sample Output
2
4*/
#include <iostream>

using namespace std;
int pre[1005];
int Find(int x)
{
    int p,tmp;
    p=x;
    while(x!=pre[x])
        x=pre[x];
    while(p!=x)
    {
        tmp=pre[p];
        pre[p]=x;
        p=tmp;
    }
    return x;
}
void join(int x,int y)
{
    int p,q;
    p=Find(x);
    q=Find(y);
    if(p!=q)pre[p]=q;
}

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,m;
        cin>>n>>m;
        for(int i=1;i<=n;i++)
            pre[i]=i;
        for(int i=1;i<=m;i++)
        {
            int a,b;
            cin>>a>>b;
            join(a,b);
        }
        int c=0;
        for(int i=1;i<=n;i++)
        {
            if(pre[i]==i)
                c++;
        }
        cout<<c<<endl;
    }
    return 0;
}

posted @ 2018-04-23 23:20  MCQ  阅读(96)  评论(0编辑  收藏  举报