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号已经确诊感染病毒,那么只需找出0号的直接朋友与间接朋友即可。

代码如下:

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int n,m;
int i;
int fa[50005];
void inin(int n)    //初始化 使每个成员的父亲都是他自己
{
    for(i=0; i<n; i++)
    {
        fa[i]=i;
    }
    return ;
}
int getf(int n)   //利用递归 找到n的父亲
{
    if(fa[n]==n)  //如果n的父亲是他自己 那么返回n;
    {
        return n;
    }
    else                 //如果不是 进行递归操作
    {
        fa[n]=getf(fa[n]);  
        return fa[n];
    }
}
void hr(int v,int j)   
{
    int fv,fj;   //fv为v的父亲,fj为j的父亲
    fv=getf(v);
    fj=getf(j);
    if(fv<fj)    //如果fv<fj  那么把fv作为fj的父亲
    {
        fa[fj]=fv;
    }
    else if(fv>fj)  //如果fv>fj  那么把fj作为fv的父亲
    {
        fa[fv]=fj;
    }
    return;
}
int main()
{
    int x,y;
    while(cin>>n>>m)
    {
        memset(fa,0,sizeof(fa));
        inin(n);     //调用函数对数组 fa 进行初始化
        int ans=0;
        for(i=1; i<=m; i++)
        {
            cin>>x>>y;
            hr(x,y);
        }
        for(i=0; i<n; i++) //遍历0-n 如果i的父亲等于0的父亲 那么 ans++
        {
            if(getf(i)==fa[0])
            {
                ans++;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

哈理工oj 1073 病毒相关推荐

  1. C. 啊对对对 (南阳理工oj—21第二次招新赛)

    解法 找到最长的公共前后缀以后,我们可以先输出t,然后t中的最长公共前后缀无需再输出(重复),只输出不重复的部分即可. 比如 aba公共前后缀为a ,不重复的部分为ba,所以你只需要先输出t(aba) ...

  2. hrbust 哈理工oj 1418 夏夜星空【带权并查集】

    夏夜星空 Time Limit: 1000 MS Memory Limit: 65536 K Total Submit: 43(20 users) Total Accepted: 19(18 user ...

  3. 山东理工oj答案java_众数问题(山东理工OJ)

    题目描述 给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数.多重集S中重数最大的元素称为众数.例如,S={1,2,2,2,3,5}.多重集S的众数是2,其重数为3.对于给定的由n ...

  4. 哈理工 oj——队列列列列!!!!!

    队列列列列!!!!! Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 337(148 users) Total Accepted: 15 ...

  5. 哈理工OJ 1380 Vagaa, eMule and Apple(水题)

    题目链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1380 Vagaa, eM ...

  6. 山东理工OJ【2121】数据结构实验之链表六:有序链表的建立(插排法)

     数据结构实验之链表六:有序链表的建立 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 输入N个无序的整数,建立一个有序链表, ...

  7. 21南阳理工oj新生赛Round#5--这是一道二分题

    题目如下: 题目类型:模拟题. AC代码如下: #include<iostream> #include<cstring> #include<cstdio> usin ...

  8. 21南阳理工oj新生赛Round#5--这是一道防ak题

    题目如下: 题目类型:数学类,思维类. AC代码如下: #include<iostream> #define ll long long using namespace std; int m ...

  9. F. 张胖胖玩多米诺骨牌 (南阳理工oj—21新生第二场招新赛)

    目标:邻两块骨牌距离的最大值最小 首先这是一道二分题(如果你可以看出来,那你就已经成功一半了) 我以上面的图,来讲解一下: 这个算是贪心思想了 X是二分出来的最大值,如果距离大于X,我就插一个(也可能 ...

最新文章

  1. Ipython 和 python 的区别
  2. 梅捷主板A780G+不支持前面板耳机输出?
  3. Javaweb-AJAX快速入门及案例实战
  4. websocket + node.js聊天系统
  5. linux ora27040,AnyBackup-Oracle 异机恢复任务失败,执行输出提示 ORA-00344、ORA-27040 错误...
  6. SAStruts アクションにJSONを返すメソッドを作成してみる
  7. cam350菜单怎么切换成中文_电子设计软件CAM350各菜单使用说明(一)
  8. SQL基本使用-查询表中的记录
  9. 华为复制加密门禁卡_小米手机的NFC可以随便复制其它小区用的门禁卡吗?
  10. Multisim 电路辅助设计思维导图
  11. 使用源码编译的方式安装Tor
  12. Echarts 关系图谱示例
  13. 阿里巴巴的微服务开源之路 1
  14. Zigbee物联网应用
  15. Android如何关闭硬件加速
  16. 用HTML绘制哆啦A梦
  17. elasticsearch安装 及 启动异常解决
  18. 为什么cinder-volume在删除volume时无反应 (by quqi99)
  19. 实体关系图(ER图)
  20. 搜狗浏览器个人数据丢失解决方案

热门文章

  1. 交通信息工程课程设计
  2. Docker服务启动报错:Job for docker.service failed because the control process exited with error
  3. 两种方式实现Kepware与PLC之间的心跳检测
  4. Mac环境下反编译工具的使用
  5. PDF转TXT怎么转?看完这篇你就会了
  6. windows网络编程——telnet协议
  7. 01【活动】如何系统的学习一门it技术
  8. 处理Springboot项目启动时streamBridge.send导致的卡住卡死问题
  9. linux查看日志文件(zip/log)命令
  10. java整合阿里pc网站支付