並查集演算法1.1POJ 1611 The Suspects
阿新 • • 發佈:2018-11-12
#include<bits/stdc++.h> using namespace std; const int maxn=200000; int fa[maxn]; int num[maxn]; int findset(int x) { return fa[x]==-1?x:fa[x]=findset(fa[x]);//常用路徑壓縮 } void binds(int u,int v) { int fu=findset(u); int fv=findset(v); if(fu!=fv) { fa[fu]=fv; num[fv]+=num[fu];//歸併; } } int main() { int n,m; while(cin>>n>>m&&n) { for(int i=0; i<n; i++) { fa[i]=-1; num[i]=1;//賦予初值; } while(m--) { int k, u, v; scanf("%d%d",&k,&u);//0號同學有可能非典 for(int i=1;i<=k-1;i++) { scanf("%d",&v); binds(u,v);//歸併 } } cout<<num[findset(0)]<<endl; } }