题意:朋友的朋友是朋友
如果A认识B,B认识C,那么ABC三个人就可以坐在同一张桌子上
但如果A认识B,C认识D,那我们就默认AB和CD不认识,需要准备两张桌子
现在我们需要你计算出,我们一共最少需要多少张桌子。
分析:利用并查集或者作为连通块数量问题
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
const double PI=acos(-1.0);
const int N=1e3+10;
int n,m,p[N];
int find(int x) {
if(p[x]!=x) p[x]=find(p[x]);
return p[x];
}
int main() {
int t,a,b; cin>>t;
while(t--) {
cin>>n>>m;
for(int i=1; i<=n; i++) p[i]=i;
while(m--) {
cin>>a>>b;
int pa=find(a), pb=find(b);
p[pa]=pb;
}
int res=0;
for(int i=1; i<=n; i++)
if(p[i]==i) res++;
cout<<res<<endl;
}
return 0;
}
标签:Tables,HDU,1213,int,查集,连通,认识,include,find
From: https://www.cnblogs.com/hellohebin/p/17247729.html