题目大意:
给出一些关系,关系上两人相互认识,就可以使用同一张桌,问最少需呀多少桌子
大致思路:
并查集。。。。第一次写没压缩超内存了QAQ
c++:
#include<cstdio>
const int MAXN=1000+50;
int p[MAXN];
int find(int x){
return x!=p[x]?p[x]=find(p[x]):x;
}
void unite(int a,int b){
p[a]=b;
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
while(n--){
int N,M;
scanf("%d%d",&N,&M);
for(int i=1;i<=N;i++){
p[i]=i;
}
for(int i=0;i<M;i++){
int a,b;
scanf("%d%d",&a,&b);
a=find(a),b=find(b);
if(a!=b)
unite(a,b);
}
int cnt=0;
for(int i=1;i<=N;i++)
if(p[i]==i)
cnt++;
printf("%d\n",cnt);
}
}
return 0;
}
本文介绍了一个关于并查集算法的应用实例,通过解决一个实际问题——如何计算最少需要多少张桌子来安排相互认识的人共同就坐。文章详细展示了C++实现代码,并提供了完整的程序结构,适合初学者学习并查集的基本概念和实现。
1304

被折叠的 条评论
为什么被折叠?



