How Many Tables
题意
有N个朋友一起来吃饭,认识的人只跟认识的做一桌,认识的人是可以传递的,A认识B,B认识C,那么A就认识C,问最少需要多少张桌子?
分析
使用并查集模板套一下,最后fa[i] == i的就是一桌,计数器+1即可
AC代码
#include <iostream>
#include <stdio.h>
using namespace std;
typedef long long ll;
const int maxn = 1e3+10;
int T,N,M;
int fa[maxn];
void init(){
for(int i = 1;i<=N;i++) fa[i] = i;
}
int find(int x){
if(x != fa[x])
fa[x] = find(fa[x]);
return fa[x];
}
void join(int x,int y){
int fx = find(x),fy = find(y);
if(fx != fy){
fa[fx] = fy;
}
}
int main(){
cin>>T;
while(T--){
scanf("%d%d",&N,&M);
init();
int a,b;
while(M--){
scanf("%d%d",&a,&b);
join(a,b);
}
for(int i = 1;i<=N;i++) find(i);
int res = 0;
for(int i = 1;i<=N;i++) if(fa[i] == i) res++;
printf("%d\n",res);
}
return 0;
} 
京公网安备 11010502036488号