描述

小Hi和小Ho所在学校的校园网被黑客入侵并投放了病毒。这事在校内BBS上立刻引起了大家的讨论,当然小Hi和小Ho也参与到了其中。从大家各自了解的情况中,小Hi和小Ho整理得到了以下的信息:

  • 校园网主干是由N个节点(编号1..N)组成,这些节点之间有一些单向的网路连接。若存在一条网路连接(u,v)链接了节点u和节点v,则节点u可以向节点v发送信息,但是节点v不能通过该链接向节点u发送信息。
  • 在刚感染病毒时,校园网立刻切断了一些网络链接,恰好使得剩下网络连接不存在环,避免了节点被反复感染。也就是说从节点i扩散出的病毒,一定不会再回到节点i。
  • 当1个病毒感染了节点后,它并不会检查这个节点是否被感染,而是直接将自身的拷贝向所有邻居节点发送,它自身则会留在当前节点。所以一个节点有可能存在多个病毒。
  • 现在已经知道黑客在一开始在K个节点上分别投放了一个病毒。

举个例子,假设切断部分网络连接后学校网络如下图所示,由4个节点和4条链接构成。最开始只有节点1上有病毒。

最开始节点1向节点2和节点3传送了病毒,自身留有1个病毒:

其中一个病毒到达节点2后,向节点3传送了一个病毒。另一个到达节点3的病毒向节点4发送自己的拷贝:

当从节点2传送到节点3的病毒到达之后,该病毒又发送了一份自己的拷贝向节点4。此时节点3上留有2个病毒:

最后每个节点上的病毒为:

小Hi和小Ho根据目前的情况发现一段时间之后,所有的节点病毒数量一定不会再发生变化。那么对于整个网络来说,最后会有多少个病毒呢?

提示:拓扑排序的应用

输入

第1行:3个整数N,M,K,1≤K≤N≤100,000,1≤M≤500,000

第2行:K个整数A[i],A[i]表示黑客在节点A[i]上放了1个病毒。1≤A[i]≤N

第3..M+2行:每行2个整数 u,v,表示存在一条从节点u到节点v的网络链接。数据保证为无环图。1≤u,v≤N

输出

第1行:1个整数,表示最后整个网络的病毒数量 MOD 142857

样例输入

4 4 1
1
1 2
1 3
2 3
3 4

样例输出

6思路:一开始没看清题,这道题说的是整个网络。后来我习惯性把num清零,可是发现这样做会wa,原来这道题要求的是之前的网络和现在的网络(总网络)的病毒数量。
#include <bits/stdc++.h>
using namespace std;
#define ll long longvector<int>to[100000+8];
queue<int>q;int n, m, k, num[100000+8], point, du[100000+8], number;void get()
{number = 0;while(!q.empty()){int t = q.front();q.pop();number += num[t];number %= 142857;for(int i = 0; i<to[t].size(); i++){num[to[t][i]] += num[t];num[to[t][i]] %= 142857;du[to[t][i]]--;if(!du[to[t][i]])q.push(to[t][i]);}}
}int main()
{int a, b;while(scanf("%d%d%d", &n, &m, &k) != EOF){
//        memset(num, 0, sizeof(num));memset(du, 0, sizeof(du));for(int i = 0; i <= n; i++)if(to[i].size())to[i].clear();while(!q.empty())q.pop();for(int i = 0; i<k; i++){scanf("%d", &point);num[point]++;}for(int i = 0; i<m; i++){scanf("%d%d", &a, &b);to[a].push_back(b);du[b]++;}for(int i = 1; i <= n; i++)if(!du[i])q.push(i);get();printf("%d\n", number);}return 0;
}/*
5 5 2
2 4
1 2
1 4
2 3
4 3
3 5
*/

转载于:https://www.cnblogs.com/RootVount/p/11205630.html

HihoCoder - 1175 拓扑排序·二相关推荐

  1. hihoCoder 1175 拓扑排序

    hihoCoder 1175 拓扑排序 描述 小Hi和小Ho所在学校的校园网被黑客入侵并投放了病毒.这事在校内BBS上立刻引起了大家的讨论,当然小Hi和小Ho也参与到了其中.从大家各自了解的情况中,小 ...

  2. 题解报告:hihoCoder #1175:拓扑排序·二

    题目链接:https://hihocoder.com/problemset/problem/1175 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho所在学 ...

  3. HihoCoder - 1174 拓扑排序·一

    由于今天上课的老师讲的特别无聊,小Hi和小Ho偷偷地聊了起来. 小Ho:小Hi,你这学期有选什么课么? 小Hi:挺多的,比如XXX1,XXX2还有XXX3.本来想选YYY2的,但是好像没有先选过YYY ...

  4. 拓扑排序(依次加入入度为0的节点)

    文章目录 拓扑排序 二.代码 拓扑排序 1)在图中找到所有入度为0的点输出 2)把所有入度为0的点在图中删掉,继续找入度为0的点输出,周而复始 3)图的所有点都被删除后,依次输出的顺序就是拓扑排序 要 ...

  5. hihocoder 1343 : Stable Members【拓扑排序】

    hihocoder #1343:题目 解释: 一个学习小组,一共有N个学员,一个主管.每个学员都有自己的导师(一个或者多个),导师可以是其他学员也可以是主管. 每周学员都要把自己的学习报告和收到的报告 ...

  6. 寒假集训日志(二)——最小生成树,拓扑排序,欧拉回路,连通路

    今天学的内容挺多的. (一)首先说最小生成树,两种算法: 1.Kruskal算法( 将边排序,然后再选,关键在于检查是否连通,使用并查集) 2.Prim算法(使用点集,有点类似与最短路的算法) 第一题 ...

  7. 考研复习之数据结构笔记(十二)图(下)(图的应用,包含最小生成树、最短路径、拓扑排序、关键路径以及单元小结)

    目录 一.图的应用 1.1 最小生成树 (1)基本概念与问题引入 (2)Prim(普里姆)算法 (3)Kruskal(克鲁斯卡尔)算法 1.2 最短路径 (1)基本概念与问题引入 (2)Dijkstr ...

  8. 大话数据结构 第七章 图(二) 最小生成树、最短路径、拓扑排序、关键路径算法

    大话数据结构 第七章 图(二) 最小生成树.最短路径.拓扑排序.关键路径算法 最小生成树 定义 Prim算法 Kruskal算法 最短路径 Dijkstra算法 Floyd算法 拓扑排序 AOV网 拓 ...

  9. 【十二省联考2019】字符串问题【后缀自动机】【拓扑排序】

    题意:给一个字符串 SSS,以子串的形式给出一些 A 类串和 B 类串以及 mmm 对 A 类串支配 B 类串的关系.求一个总长度最长的 A 类串序列,使得每个串都存在一个 B 类串前缀被后一个串支配 ...

最新文章

  1. CentOS 7.7 安装cmake3
  2. 转载-如何做好项目的需求与业务调研
  3. 技术胖1-4季视频复习— (看视频笔记)
  4. 最新log4j2 远程代码执行漏洞(紧急扩散)
  5. ndr4108贴片晶振是多少频率_流处理器、核心频率、 位宽……这些显卡参数你知道吗?—— 电脑硬件科普篇(八)...
  6. LINUX下载编译sqlite3
  7. 传智播客 sklearn数据集与机器学习组成
  8. element-ui分页器的使用
  9. Brocade FOS下载 博科光纤交换机固件升级
  10. 本地的手机号码归属地查询-oracle数据
  11. html5中检测网络状态的方法,前端js监听浏览器网络变化
  12. 皮肤样本微生物的检测介绍
  13. 单机100万连接,每秒10万次请求服务端的设计与实现(三) - 变量共享、超线程与高性能队列
  14. 苹果笔记本用户使用Mac版本微博软件Maipo,如何添加账户与高级授权?
  15. 服务器知识:关于阿里云服务器域名备案内容
  16. 梦回校园,一个很精彩的梦(精彩做梦,今天记录1个到博客,其它都发在微信朋友圈和QQ空间了)
  17. 致远SPM解决方案之人力资源管理
  18. 深信服SCSA认证最新知识点四
  19. 电子计算机按数字错乱,笔记本电脑数字键盘错乱怎么办 笔记本键盘按键错乱恢复方法...
  20. 黑马入门教程笔记01-OC

热门文章

  1. u-boot-2012.07 for FL2440
  2. windows系统内实现端口转发
  3. manacher最长回文子串
  4. MPU和CPU有什么区别?
  5. django升级问题
  6. python-I/O-文件操作
  7. loadrunner 场景设计-负载生成器管理
  8. dmalloc用法快速入门
  9. makefile实例【转载】
  10. C语言 数字和字符串的转换 error