题意:n 个人,如果 a 和 b 认识,b 和 c 认识,那么认为 a b c 都互相认识,三个人被安排在一张桌子上,问这 n 个人最少安排多少张桌子。
并查集裸题。
#include<cstring>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
int fa[1005];
int n, m, t;
int findfa(int x){
if(fa[x] != x){
fa[x] = findfa(fa[x]);
}
return fa[x];
}
void add(int x, int y){
if(x > y)
swap(x, y);
x = findfa(x);
y = findfa(y);
if(x != y){
fa[y] = x;
n--;
}
}
int main(){
// freopen("a.txt", "r", stdin);
cin >> t;
while(t--){
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; i++)
fa[i] = i;
while(m--){
int a, b;
scanf("%d %d", &a, &b);
add(a, b);
}
cout << n << endl;
}
return 0;
}