并查集初学——病毒
2016-04-07 14:52
239 查看
病毒
Description
某种病毒袭击了某地区,该地区有N(1≤N≤50000)人,分别编号为0,1,…,N-1,现在0号已被确诊,所有0的直接朋友和间接朋友都要被隔离。例如:0与1是直接朋友,1与2是直接朋友,则0、2就是间接朋友,那么0、1、2都须被隔离。现在,已查明有M(1≤M≤10000)个直接朋友关系。如:0,2就表示0,2是直接朋友关系。
请你编程计算,有多少人要被隔离。
Input
第一行包含两个正整数N(1≤N≤50000),M(1≤M≤100000),分别表示人数和接触关系数量;
在接下来的M行中,每行表示一次接触,;
每行包括两个整数U, V(0 <= U, V < N)表示一个直接朋友关系。
Output
输出数据仅包含一个整数,为共需隔离的人数(包含0号在内)。
Sample Input
100 4
0 1
1 2
3 4
4 5
Sample Output
3
题目传送门:病毒(点击可交题)
Description
某种病毒袭击了某地区,该地区有N(1≤N≤50000)人,分别编号为0,1,…,N-1,现在0号已被确诊,所有0的直接朋友和间接朋友都要被隔离。例如:0与1是直接朋友,1与2是直接朋友,则0、2就是间接朋友,那么0、1、2都须被隔离。现在,已查明有M(1≤M≤10000)个直接朋友关系。如:0,2就表示0,2是直接朋友关系。
请你编程计算,有多少人要被隔离。
Input
第一行包含两个正整数N(1≤N≤50000),M(1≤M≤100000),分别表示人数和接触关系数量;
在接下来的M行中,每行表示一次接触,;
每行包括两个整数U, V(0 <= U, V < N)表示一个直接朋友关系。
Output
输出数据仅包含一个整数,为共需隔离的人数(包含0号在内)。
Sample Input
100 4
0 1
1 2
3 4
4 5
Sample Output
3
#include<stdio.h> int father[50005]; int n,m; void chuhua()//初始化每个点为个体的根节点 { int i; for(i=0;i<n;i++) { father[i]=i; } } int getfather(int x)//寻找根节点 { int a=x;//保存这个需要找爸爸的点 while(a!=father[a]) { a=father[a]; } father[x]=a;//直接将这个点连到根节点上去(路径压缩) return father[x]; } void mix(int x,int y)//合并两个点的根节点 { int fa=getfather(x); int fb=getfather(y); if(fa!=fb) { father[fa]=fb; } } int main() {—— int i,v1,v2; while(~scanf("%d%d",&n,&m)) { chuhua(); while(m--) { scanf("%d%d",&v1,&v2); mix(v1,v2); } int p=getfather(0); int s=0; for(i=0;i<n;i++) { if(getfather(i)==p) { s++; } } printf("%d\n",s); } return 0; }
题目传送门:病毒(点击可交题)
相关文章推荐
- SPRING-MVC访问静态文件,如jpg,js,css
- oracle全文索引
- 触摸事件
- 然而沼跃鱼早已看穿了一切——字符串替换
- FFMPEG基本概念
- echarts showloading ajax不起作用
- webview添加头尾视图
- 6.2.6 QMGR_JOB:针对特定邮件和MDA的发送任务
- 一个简单的servlet容器
- 前端常用的代码片段
- jquery二级目录选中当前页的样式
- php记日志
- HashMap类的注释翻译
- Android Studio下NDK的使用
- iOS绘制 - 自定义制作进度条
- 01背包问题
- mysql-游标及存储过程游标的使用--源自技术
- UI控件
- iOS中利用KeyChain获取UUID(唯一标示符)
- Hadoop、Hive 参数说明