并查集——poj1611(入门)
Posted GGBeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并查集——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(入门)的主要内容,如果未能解决你的问题,请参考以下文章