【HDOJ】How Many Tables

Posted on 2018-04-11 14:49  som_nico  阅读(105)  评论(0编辑  收藏  举报

How Many Tables

题意:就是问有多少个集合

思路:并查集

#include<bits/stdc++.h>
using namespace std;
int f[1007];
int find(int x)
{
    if(f[x]==x)
        return x;
    else
        return  f[x]=find(f[x]);
}
void merge(int x,int y)
{
    int fx,fy;
    fx = find(x);
    fy = find(y);
    if(fx != fy)
        f[fx]=fy;
}
int main()
{
    int n,m,i,x,y,T;
    cin>>T;
    while(T--)
    {
        cin>>n>>m;
        for(i=1; i<=n; i++)
        {
            f[i]=i;
        }
        for(i=0; i<m; i++)
        {
            cin>>x>>y;
            merge(x,y);
        }
        int sum=0;
        for(i=1; i<=n; i++)
        {
            if(f[i]==i)
                sum++;
        }
        cout<<sum<<endl;
    }
    return 0;
}