(模板题)How Many Tables

版权声明: https://blog.csdn.net/qq_40829288/article/details/82782825

HDU-How Many Tables-1213

问题描述:

给n个人分配桌子,要求在一个桌子上只能有认识的人,然后给出了m中关系,求需要多少张桌子;

并查集:假设刚开始需要cnt=n张桌子,没合并一次,cnt减一,最后cnt的值就是答案;

初始化+查找+合并;

#include<iostream>
using namespace std;
const int maxn=1010;
int T;
int n,m,cnt;
int maze[maxn];

void init()
{
    for(int i=0;i<maxn;i++)
        maze[i]=i;
}

int my_find(int x)
{
    return x==maze[x]? x : my_find(maze[x]);
}

void my_union(int i,int j)
{
    int x=my_find(i);
    int y=my_find(j);
    if(x!=y)
    {
        maze[x]=y;
        cnt--;
    }
}

int main()
{
    cin>>T;
    int p,q;
    while(T--)
    {
        init();
        cin>>n>>m;
        cnt=n;
        for(int i=0;i<m;i++)
        {
            cin>>p>>q;
            my_union(p,q);
        }
        cout<<cnt<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40829288/article/details/82782825