码迷,mamicode.com
首页 > 其他好文 > 详细

poj1611

时间:2015-08-10 10:40:14      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:

链接:点击打开链接

题意:给出一个n和m,n为人数,编号为0~n-1,有m个团体,团体中的人相互认识,为与编号为0认识的人有多少

代码:

#include <iostream>
#include<stdio.h>
#include<algorithm>
#include <stdio.h>
#include <string.h>
using namespace std;
int f[50005],temp[50005];
int found(int x){                                      //找到根节点
    if(f[x]!=x)
    f[x]=found(f[x]);
    return f[x];
}
int main(){
    int m,n,k,i,j,sum,minn;
    while(scanf("%d%d",&m,&n)!=EOF&&(m||n)){
        for(i=0;i<m;i++)
        f[i]=i;
        int cur=0;
        for(i=1;i<=n;i++){
            scanf("%d",&k);
            for(j=0;j<k;j++){
                scanf("%d",&temp[j]);
                if(j!=0)
                f[found(temp[j])]=f[found(temp[j-1])];  //使根节点连在一起,但并没有更新子节点的根节点
            }
        }
        for(i=0;i<m;i++)
        temp[i]=found(i);                               //因此在这步将根节点找到并储存起来
        sum=0;
        for(i=0;i<m;i++)
        if(temp[i]==temp[0])                            //跟编号我0共用一个根节点也就是一个集合中的为
        sum++;                                          //患病人数
        cout<<sum<<endl;
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

poj1611

标签:

原文地址:http://blog.csdn.net/stay_accept/article/details/47393899

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!