您的位置:首页 > 其它

hdu1213 How many tables 并查集

2017-03-21 14:17 429 查看
题目大意:

给出一些关系,关系上两人相互认识,就可以使用同一张桌,问最少需呀多少桌子

大致思路:

并查集。。。。第一次写没压缩超内存了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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hdu 并查集 acm