首页 > 代码库 > 并查集——poj1611(入门)
并查集——poj1611(入门)
传送门:The Suspects
- 并查集水题
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int maxn = 50005; int n,m; int a[maxn],b,ans; int pre[maxn]; void init() { for(int i=0;i<n;i++){ pre[i] = i; } } int findPre(int x) { if(pre[x]==x) return x; else return pre[x]=findPre(pre[x]); } void unite(int x,int y) { x = findPre(x); y = findPre(y); if(x==y) return; pre[y] = x; //y的上级变为x的祖先节点 } int main() { while(scanf("%d%d",&n,&m) && !(n==0&&m==0)){ init(); int num,sum=0; for(int i=0;i<m;i++){ scanf("%d",&num); if(num>=1){ for(int j=0;j<num;j++){ scanf("%d",&a[j]); } for(int j=1;j<num;j++){ unite(a[0],a[j]); } } } for(int i=0;i<n;i++){ if(findPre(i) == pre[0]){ sum++; } } printf("%d\n",sum); } return 0; }
并查集——poj1611(入门)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。