题意:
你邀请了N个朋友来聚会 ,在他们之中有M个关系:
x y :代表x和y是好朋友。
如果x,y是朋友,y,z是朋友,则认为xyz都是朋友(关系的传递)
你希望朋友应该坐在一起,请问最少要准备多少张桌子?
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=1005;
int parent[N];
int getroot(int a)
{
return parent[a]==a?a:parent[a]=getroot(parent[a]);
}
void merge(int a,int b)
{
int p1=getroot(a);
int p2=getroot(b);
if(p1!=p2)
parent[p1]=p2;
}
int main()
{
int t,n,m,x,y;
cin>>t;
while(t--)
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
parent[i]=i;
}
for(int i=0;i<m;i++)
{
cin>>x>>y;
merge(x,y);
}
int ans=0;
for(int i=1;i<=n;i++)
{
if(parent[i]==i)
ans++;
}
cout<<ans<<endl;
}
}