首页 > 代码库 > POJ 1611 The Suspects(并查集)
POJ 1611 The Suspects(并查集)
思路:直接用并查集,最后找到 0 所在的集合,把 集合中的 人数 输出即可
#include<iostream>using namespace std;const int maxn=30000 +100;int set[maxn];int sum[maxn];int set_find(int d){ if(set[d]<0) return d; return set[d]=set_find(set[d]);}void join(int x,int y){ x=set_find(x); y=set_find(y); set[x]=y;}int main(){ int n,m; int k; while(cin>>n>>m) { if(n==0 &&m==0) break; memset(set,-1,sizeof(set)); memset(sum,0,sizeof(sum)); int i; for(i=0;i<n;i++) sum[i]=1; while(m--) { cin>>k; int a,b; k--; cin>>a; while(k--) { cin>>b; if(set_find(a)!=set_find(b)) { sum[set_find(b)]=sum[set_find(b)]+sum[set_find(a)];//先求和 join(set_find(a),set_find(b));//再 合并,把 根合并 } a=b; } } cout<<sum[set_find(0)]<<endl; }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。