HihoCoder - 1175 拓扑排序·二
描述
小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 拓扑排序·二相关推荐
- hihoCoder 1175 拓扑排序
hihoCoder 1175 拓扑排序 描述 小Hi和小Ho所在学校的校园网被黑客入侵并投放了病毒.这事在校内BBS上立刻引起了大家的讨论,当然小Hi和小Ho也参与到了其中.从大家各自了解的情况中,小 ...
- 题解报告:hihoCoder #1175:拓扑排序·二
题目链接:https://hihocoder.com/problemset/problem/1175 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho所在学 ...
- HihoCoder - 1174 拓扑排序·一
由于今天上课的老师讲的特别无聊,小Hi和小Ho偷偷地聊了起来. 小Ho:小Hi,你这学期有选什么课么? 小Hi:挺多的,比如XXX1,XXX2还有XXX3.本来想选YYY2的,但是好像没有先选过YYY ...
- 拓扑排序(依次加入入度为0的节点)
文章目录 拓扑排序 二.代码 拓扑排序 1)在图中找到所有入度为0的点输出 2)把所有入度为0的点在图中删掉,继续找入度为0的点输出,周而复始 3)图的所有点都被删除后,依次输出的顺序就是拓扑排序 要 ...
- hihocoder 1343 : Stable Members【拓扑排序】
hihocoder #1343:题目 解释: 一个学习小组,一共有N个学员,一个主管.每个学员都有自己的导师(一个或者多个),导师可以是其他学员也可以是主管. 每周学员都要把自己的学习报告和收到的报告 ...
- 寒假集训日志(二)——最小生成树,拓扑排序,欧拉回路,连通路
今天学的内容挺多的. (一)首先说最小生成树,两种算法: 1.Kruskal算法( 将边排序,然后再选,关键在于检查是否连通,使用并查集) 2.Prim算法(使用点集,有点类似与最短路的算法) 第一题 ...
- 考研复习之数据结构笔记(十二)图(下)(图的应用,包含最小生成树、最短路径、拓扑排序、关键路径以及单元小结)
目录 一.图的应用 1.1 最小生成树 (1)基本概念与问题引入 (2)Prim(普里姆)算法 (3)Kruskal(克鲁斯卡尔)算法 1.2 最短路径 (1)基本概念与问题引入 (2)Dijkstr ...
- 大话数据结构 第七章 图(二) 最小生成树、最短路径、拓扑排序、关键路径算法
大话数据结构 第七章 图(二) 最小生成树.最短路径.拓扑排序.关键路径算法 最小生成树 定义 Prim算法 Kruskal算法 最短路径 Dijkstra算法 Floyd算法 拓扑排序 AOV网 拓 ...
- 【十二省联考2019】字符串问题【后缀自动机】【拓扑排序】
题意:给一个字符串 SSS,以子串的形式给出一些 A 类串和 B 类串以及 mmm 对 A 类串支配 B 类串的关系.求一个总长度最长的 A 类串序列,使得每个串都存在一个 B 类串前缀被后一个串支配 ...
最新文章
- CentOS 7.7 安装cmake3
- 转载-如何做好项目的需求与业务调研
- 技术胖1-4季视频复习— (看视频笔记)
- 最新log4j2 远程代码执行漏洞(紧急扩散)
- ndr4108贴片晶振是多少频率_流处理器、核心频率、 位宽……这些显卡参数你知道吗?—— 电脑硬件科普篇(八)...
- LINUX下载编译sqlite3
- 传智播客 sklearn数据集与机器学习组成
- element-ui分页器的使用
- Brocade FOS下载 博科光纤交换机固件升级
- 本地的手机号码归属地查询-oracle数据
- html5中检测网络状态的方法,前端js监听浏览器网络变化
- 皮肤样本微生物的检测介绍
- 单机100万连接,每秒10万次请求服务端的设计与实现(三) - 变量共享、超线程与高性能队列
- 苹果笔记本用户使用Mac版本微博软件Maipo,如何添加账户与高级授权?
- 服务器知识:关于阿里云服务器域名备案内容
- 梦回校园,一个很精彩的梦(精彩做梦,今天记录1个到博客,其它都发在微信朋友圈和QQ空间了)
- 致远SPM解决方案之人力资源管理
- 深信服SCSA认证最新知识点四
- 电子计算机按数字错乱,笔记本电脑数字键盘错乱怎么办 笔记本键盘按键错乱恢复方法...
- 黑马入门教程笔记01-OC