poj1611
2015-08-10 09:41
363 查看
链接:点击打开链接
题意:给出一个n和m,n为人数,编号为0~n-1,有m个团体,团体中的人相互认识,为与编号为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; }
相关文章推荐
- 计蒜客 难题题库 129 判断日期是否符合格式
- 色彩格式介绍
- TortoiseSVN提交提示423 Locked的解决办法
- JavaScript MD5 与 Java MessageDigest 加密后的值相同
- javascript中caller和callee call和apply
- jQuery源码的几篇文章
- 计蒜客 难题题库 128 返回最后的字符串
- android 图片上传
- 报销流程不简单,OA平台的私人订制
- 解决IQKeyboardManager两个textfield之间无法previous&next问题
- android中如何使用ViewRootImpl这个类
- 详解C语言中const关键字的用法
- 【涨姿势】你知道世界上第一款H游戏是怎样的吗?
- 最精简的java 线程池与任务队列
- pb9 通过ole db连接sqlite3数据库
- B. Equidistant String
- 2014年03月CCF真题练习答案整理
- 计蒜客 难题题库 127 进制转换
- mongodb3.03开启认证
- JavaScript高级程序设计笔记 事件冒泡和事件捕获