[kuangbin带你飞]专题五 并查集 B POJ 1611

来源:互联网 发布:360软件认证中心 编辑:程序博客网 时间:2024/05/18 00:06

题目地址:https://vjudge.net/contest/66964#problem/B

思路:并查集模板题。

AC代码:

#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int maxn=30000+10;int fa[maxn];int n,m;int find(int p){    int t=p;    if(p!=fa[p])    {        fa[p]=find(fa[p]);    }        return fa[p];}void merge(int p,int q){    p=find(p);    q=find(q);    if(p!=q)    {        fa[p]=q;    }}int main(){    while(scanf("%d%d",&n,&m) && n+m)    {        for(int i=0;i<=n;i++)            fa[i]=i;        for(int i=1;i<=m;i++)        {            int k;            scanf("%d",&k);            int temp,pre;            for(int j=1;j<=k;j++)            {                scanf("%d",&temp);                if(j==1)                {                    pre=temp;                }                else                {                    merge(pre,temp);                    pre=temp;                }            }        }        int temp=find(0);        int ans=0;        for(int i=0;i<n;i++)        {            if(find(i)==temp)            {                ans++;                //printf("%d\n",i);            }        }        printf("%d\n",ans);    }}


0 0