题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1213
题意:某人生日,要邀请他的朋友来家里,但是他的朋友相互之间不一定全都认识,如果都坐在一张桌子上会很尴尬,所以现在告诉你那些朋友之间是相互认识的,问你最少需要多少张桌子
解析:裸的并查集
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e4+100;
int fa[maxn];
int getfa(int x)
{
if(fa[x]==x)
return fa[x];
return fa[x] = getfa(fa[x]);
}
void merge(int u,int v)
{
int t1 = getfa(u);
int t2 = getfa(v);
if(t1!=t2)
fa[t1] = t2;
}
int main(void)
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
fa[i] = i;
while(m--)
{
int x,y;
scanf("%d %d",&x,&y);
merge(x,y);
}
int ans = 0;
for(int i=1;i<=n;i++)
{
if(fa[i]==i)
ans++;
}
printf("%d\n",ans);
}
return 0;
}