poj--1611

来源:互联网 发布:中国核弹数量知乎 编辑:程序博客网 时间:2024/06/02 18:34

一道简单的并查集


#include<iostream>#include<cstdio>#include<cstring>using namespace std;int fa[333333],n,m;int find(int x){    if(fa[x]==x)       return x;    return find(fa[x]);} void join(int x,int y){     int fx=find(x);     int fy=find(y);     if(fx!=fy)        fa[fx]=fy;}int main(){     int i,j,k,k1,k2;    while(cin>>n>>m)    {         if(n==0)            break;         for(i=0;i<n;i++)             fa[i]=i;         for(i=0;i<m;i++)         {             cin>>k>>k1;              for(j=1;j<k;j++)             {                  cin>>k2;                  join(k1,k2);                  k1=k2;             }          }         int cnt=0;         for(i=0;i<n;i++)         {             k1=find(0);k2=find(i);             if(k1==k2)                cnt++;         }         cout<<cnt<<endl;    } return 0;}


0 0