hrbustoj 1073:病毒(并查集,入门题)
病毒
Time Limit: 1000 MS Memory Limit: 65536 K
Total Submit: 719(185 users) Total Accepted: 247(163 users) Rating: Special Judge: No
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
并查集,入门题。
思路是先根据关系建立关系树,然后记录0号小朋友的根节点,依次与剩下所有的小朋友的根节点比较,相等则计数+1,表示这是和0号小朋友有关系的,即被感染的人。最后输出总计数(即被0号小朋友感染的人数)。
套模板很容易过。
代码:
#include <stdio.h> /* 并查集模板
*/
int UFS_NUM; //并查集中元素总数
typedef struct node{
int data; //节点对应的编号
int rank; //节点对应秩
int parent; //节点对应的双亲下标
}UFSTree; //并查集树的节点类型
void MAKE_SET(UFSTree t[]) //初始化并查集树
{
int i;
for(i=;i<UFS_NUM;i++){
t[i].data = i; //数据为该点编号
t[i].rank = ; //秩初始化为0
t[i].parent = i; //双亲初始化为指向自己
}
}
int FIND_SET(UFSTree t[],int x) //在x所在的子树中查找集合编号
{
if(t[x].parent == x) //双亲是自己
return x; //双亲是自己,返回 x
else //双亲不是自己
return FIND_SET(t,t[x].parent); //递归在双亲中查找x
}
void UNION(UFSTree t[],int x,int y) //将x和y所在的子树合并
{
x = FIND_SET(t,x); //查找 x 所在分离集合树的编号
y = FIND_SET(t,y); //查找 y 所在分离集合树的编号
if(t[x].rank > t[y].rank) //y 节点的秩小于 x节点的秩
t[y].parent = x; //将 y 连接到 x 节点上,x 作为 y 的双亲节点
else{ //y 节点的秩大于等于 x 节点的秩
t[x].parent = y; //将 x 连接到 y 节点上,y 作为 x 的双亲节点
if(t[x].rank==t[y].rank) //x 和 y的双亲节点秩相同
t[y].rank++; //y 节点的秩增 1
}
}
int main()
{
int i,n,m,x,y;
while(scanf("%d%d",&n,&m)!=EOF){
UFSTree t[];
UFS_NUM = n;
MAKE_SET(t);
for(i=;i<=m;i++){
scanf("%d%d",&x,&y);
UNION(t,x,y);
}
int f0 = FIND_SET(t,);
int sum=;
for(i=;i<n;i++)
if(FIND_SET(t,i)==f0)
sum++;
printf("%d\n",sum);
}
return ;
}
Freecode : www.cnblogs.com/yym2013
hrbustoj 1073:病毒(并查集,入门题)的更多相关文章
- 并查集入门--畅通工程(HDU1232)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 畅通工程 Time Limit: 4000/2000 MS (Java/Others) M ...
- POJ1611 && POJ2524 并查集入门
The Suspects Time Limit: 1000MS Memory Limit: 20000K Total Submissions: 28293 Accepted: 13787 De ...
- hdu1272并查集入门
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- 【HDU1231】How Many Tables(并查集基础题)
什么也不用说,并查集裸题,直接盲敲即可. #include <iostream> #include <cstring> #include <cstdlib> #in ...
- poj1182 食物链(并查集 好题)
https://vjudge.net/problem/POJ-1182 并查集经典题 对于每只动物创建3个元素,x, x+N, x+2*N(分别表示x属于A类,B类和C类). 把两个元素放在一个组代表 ...
- PAT题解-1118. Birds in Forest (25)-(并查集模板题)
如题... #include <iostream> #include <cstdio> #include <algorithm> #include <stri ...
- Brain Network (easy)(并查集水题)
G - Brain Network (easy) Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & ...
- PAT甲级 并查集 相关题_C++题解
并查集 PAT (Advanced Level) Practice 并查集 相关题 <算法笔记> 重点摘要 1034 Head of a Gang (30) 1107 Social Clu ...
- 杭电ACM省赛集训队选拔赛之热身赛-How Many Tables,并查集模板题~~
How Many Tables Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
随机推荐
- Linux中vi编辑器的用法
实验一: vi编辑器的模式切换 1. 实验目标:熟练掌握vi编辑器的三种模式间切换及其特点 2. 实验操作步骤: 步骤一: 进入vi编辑器即命令模式 进入vi编辑器可以在命令终 ...
- DataTable列上多值运算
1.从网上找了个中缀算法(也不知道什么前缀后缀,抱歉),可以对字符串表达式进行运算 2.有些时候还是会用到ASCII码表的 char c = expression[k];//expression为一字 ...
- goquery
使用goquery 会用jquery的,goquery基本可以1分钟上手,下面是goquery文档 http://godoc.org/github.com/PuerkitoBio/goquery 1. ...
- web.config 加密/解密
(Aspnet_regiis.exe) 这样的一个工具,可以对站点的.config文件的节进行加密 方法: #> 加密:aspnet_regiis -pef "加密的web.confi ...
- NoClassDefFoundError: org/hibernate/annotations/common/reflection/ReflectionManager 解决方法
差一个jar包, 将hibernate-commons-annotations.jar加入到classpath中
- 【福利将至】iPhone用户可用Siri发微信了
北京时间6月14日,苹果WWDC16开发者大会召开.继2015年3月份春季发布会和9月份的秋季新品发布会,苹果和腾讯联手Apple Watch版微信和微信3DTouch功能之后,双方在今年的WWDC上 ...
- Swift Tour 随笔总结 (2)
Type Aliases typealias AudioSample = UInt16 Booleans 非boolean值不会被替代为bool,例如: let i = 1 if i { // thi ...
- Summarize Series For Burying My College
Summarize Series For Burying My College For Grade ...
- Android 中this、 getApplicationContext()、getApplication()之间的区别
this:代表当前,在Activity当中就是代表当前的Activity,换句话说就是Activity.this在Activity当中可以缩写为this. getApplicationContext( ...
- Unity3D研究院之动态修改烘培贴图的大小&脚本烘培场景
Unity默认烘培场景以后每张烘培贴图的大小是1024.但是有可能你的场景比较简单,用1024会比较浪费.如下图所示,这是我的一个场景的烘培贴图,右上角一大部分完全是没有用到,但是它却占着空间. 有 ...