当前位置: 首页 > news >正文

并查集-----hrbust 1073

1、链接

http://acm.hrbust.edu.cn/vj/index.php?c=problem-problem&id=9475

2、题目

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

 

3、分析:题意很清楚,只要有公共的祖先(fa[0])就加1

 

4、Code

#include<bits/stdc++.h>
using namespace std;
const int maxn = 50005;
int fa[maxn];

int find(int x){
/**
    Num1 时间复杂度更优
*/
 return fa[x] != x ? fa[x] = find(fa[x]) : fa[x];
//    int r = x;
//    while(fa[r] != r){
//        r = fa[r];
//    }
//    return r;
}

void unin(int x, int y){
    int fx = find(x);
    int fy = find(y);
    if(x < y){
        fa[fy] = fx;
    }
    else
        fa[fx] = fy;
}

int main(){
    int n,m;
    int u,v;
    while(~scanf("%d%d",&n,&m)){

        for(int i = 0; i < n; i++){
            fa[i] = i;
        }

        while(m--){
            scanf("%d%d",&u,&v);
            unin(u,v);
        }
        int ans = 0;
        for(int i = 0; i < n; i++){
            if(find(i) == fa[0])
                ans++;
        }
        printf("%d\n",ans);
    }
    return 0;
}

 

 

 

转载于:https://www.cnblogs.com/mcgrady_ww/p/8046571.html

相关文章:

  • Unity LayerMask 的位运算
  • 搭建千万PV高可用系统—DNS
  • eclipse再见,android studio 新手入门教程(一)基本设置
  • CentOS 7.2 安装jdk1.8.x版本
  • UVA 725 division【暴力枚举】
  • angularjs $$phase
  • 安装PHP5,安装PHP7
  • CSS 为什么这么难学?
  • sql server 索引总结一
  • 『TensorFlow』读书笔记_Word2Vec
  • Android UI进阶之旅15 SVG的使用
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • Android的一些命名规范
  • 零元学Expression Blend 4 - Chapter 13 用实例了解布局容器系列-「Pathlistbox」I
  • Spring源码系列-容器刷新
  • cookie和session
  • docker python 配置
  • ES6简单总结(搭配简单的讲解和小案例)
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java IO学习笔记一
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Java的Interrupt与线程中断
  • jquery ajax学习笔记
  • js中的正则表达式入门
  • Linux中的硬链接与软链接
  • Lsb图片隐写
  • MD5加密原理解析及OC版原理实现
  • Meteor的表单提交:Form
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • oschina
  • PaddlePaddle-GitHub的正确打开姿势
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 诡异!React stopPropagation失灵
  • 将回调地狱按在地上摩擦的Promise
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 学习笔记:对象,原型和继承(1)
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • $.ajax()参数及用法
  • (4.10~4.16)
  • (C语言)fgets与fputs函数详解
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (力扣)循环队列的实现与详解(C语言)
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (转)【Hibernate总结系列】使用举例
  • (转载)深入super,看Python如何解决钻石继承难题
  • .“空心村”成因分析及解决对策122344
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET 事件模型教程(二)
  • .Net 应用中使用dot trace进行性能诊断
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复