How Many Tables (vj)

并查集的使用!


#include<bits/stdc++.h>
using namespace std;
int fa[1005];
int Find(int x)
{
    while(x!=fa[x]) x=fa[x];
    return x;
}
int main()
{
    int t,n,a,b,m;
    scanf("%d",&t);
    for(int k=0;k<t;k++)
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++) fa[i]=i;
        while(m--)
        {
            scanf("%d%d",&a,&b);
            int x=Find(a),y=Find(b);
            if(x!=y) fa[x]=y;
        }
        int sum=0;
        for(int i=1;i<=n;i++)
            if(i==fa[i]) sum++;
        printf("%d\n",sum);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41061455/article/details/80609436