题解报告:hihoCoder #1175:拓扑排序·二
题目链接:https://hihocoder.com/problemset/problem/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解题思路:这道还是拓扑排序裸题,题目已经保证是有向无环图。要求每次出队队首元素,都要将本身所带病毒数传给其所有邻接点。最后计算所有节点编号的总病毒数。简单题,注意两数相加时要取余,避免数据溢出!AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=100005; 4 const int mod=142857; 5 vector<int> vec[maxn];//邻接表,每个节点保存与它相连的边的另一个端点 6 queue<int> que; 7 int n,m,k,x,u,v,InDeg[maxn],virus[maxn];//记录每个节点的入度,num用来表示节点的个数,virus数组用来记录每个节点的病毒个数 8 void topsort(){ 9 for(int i=1;i<=n;++i) 10 if(!InDeg[i])que.push(i);//预处理,先将入度为0的节点编号入队 11 while(!que.empty()){ 12 int now=que.front();que.pop();//出队入度为0的编号节点 13 for(unsigned int i=0;i<vec[now].size();++i){ 14 if(--InDeg[vec[now][i]]==0)que.push(vec[now][i]); 15 virus[vec[now][i]]=(virus[now]+virus[vec[now][i]])%mod;//注意取余操作,避免数据溢出 16 } 17 } 18 } 19 int main() 20 { 21 while(cin>>n>>m>>k){ 22 for(int i=1;i<=n;++i)vec[i].clear();//全部清空 23 memset(InDeg,0,sizeof(InDeg));//全部顶点的度清0 24 memset(virus,0,sizeof(virus)); 25 while(k--){cin>>x;virus[x]++;} 26 while(m--){ 27 cin>>u>>v; 28 vec[u].push_back(v);//u指向v 29 InDeg[v]++;//v的入度加1 30 } 31 topsort(); 32 int sum=0;//保存所有节点病毒的总个数 33 for(int i=1;i<=n;++i)sum=(sum+virus[i])%mod; 34 cout<<sum<<endl; 35 } 36 return 0; 37 }
转载于:https://www.cnblogs.com/acgoto/p/9091048.html
题解报告:hihoCoder #1175:拓扑排序·二相关推荐
- HihoCoder - 1175 拓扑排序·二
描述 小Hi和小Ho所在学校的校园网被黑客入侵并投放了病毒.这事在校内BBS上立刻引起了大家的讨论,当然小Hi和小Ho也参与到了其中.从大家各自了解的情况中,小Hi和小Ho整理得到了以下的信息: 校园 ...
- hihoCoder 1175 拓扑排序
hihoCoder 1175 拓扑排序 描述 小Hi和小Ho所在学校的校园网被黑客入侵并投放了病毒.这事在校内BBS上立刻引起了大家的讨论,当然小Hi和小Ho也参与到了其中.从大家各自了解的情况中,小 ...
- HihoCoder - 1174 拓扑排序·一
由于今天上课的老师讲的特别无聊,小Hi和小Ho偷偷地聊了起来. 小Ho:小Hi,你这学期有选什么课么? 小Hi:挺多的,比如XXX1,XXX2还有XXX3.本来想选YYY2的,但是好像没有先选过YYY ...
- 拓扑排序--猫猫向前冲
问题描述: 众所周知, TT 是一位重度爱猫人士,他有一只神奇的魔法猫. 有一天,TT 在 B 站上观看猫猫的比赛.一共有 N 只猫猫,编号依次为1,2,3,-,N进行比赛.比赛结束后,Up 主会为所 ...
- hdu 5438 Ponds 拓扑排序
Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...
- HDU 3342 Legal or Not(拓扑排序)
描述 ACM-DIY is a large QQ group where many excellent acmers get together. It is so harmonious that ju ...
- 【LeetCode】拓扑排序
[207] Course Schedule 排课问题,n门课排课,有的课程必须在另外一些课程之前上,问能不能排出来顺序. 题解:裸的拓扑排序.参考代码见算法竞赛入门指南这本书. 1 class Sol ...
- 拓扑排序(依次加入入度为0的节点)
文章目录 拓扑排序 二.代码 拓扑排序 1)在图中找到所有入度为0的点输出 2)把所有入度为0的点在图中删掉,继续找入度为0的点输出,周而复始 3)图的所有点都被删除后,依次输出的顺序就是拓扑排序 要 ...
- NOIP 2020 T1 排水系统(拓扑排序)
NOIP 2020 T1 排水系统 题解 很显然是拓扑排序,按题意直接模拟复杂度仅仅是 O ( n ) O(n) O(n)的. 但是涉及到分数的加法,通分会爆变量范围吗? 一开始以为最大只是 5 11 ...
最新文章
- 遇到的问题然后自己找到答案
- 你不知道的JavaScript错误和调用栈常识
- ffplay的快捷键以及选项
- Java:控制台输入车辆信息,将信息保存至数据库中
- 回顾一年的工作历程_【设备管理公司】召开20202021年度总结计划表彰暨工作述职会议...
- Php接收Vba post例子,vba发送窗口消息_postmessage
- ASP.NET 使用Ajax
- mysql数据库增删改查关键字_Mysql数据库,增删改查笔记(非常重要)-阿里云开发者社区...
- JDK问题--linux下java unrecognized class file version错误的解决
- CentOS系统配置 iptables防火墙
- linux Shell入门
- 数据库多表链接查询的方式
- bochs上网镜像怎么上网_【bochs win10镜像可上网版】bochs win10镜像img下载 完整版-趣致软件园...
- 云上游戏数据分析实践
- 【Encoder-Decoder】
- 树莓派用iPad做显示器
- 在更改计算机的设置路由器,怎么改路由器wifi密码 怎么修改路由器wifi密码
- 【PTA乙级】【1096 大美数 (15 分)】
- 龙迅LT8612UX 是一款 HDMI 至 HDMIVGA 转换器
- windoews连接linux终端,Linux Samba 与 Windoews 共享文件
热门文章
- 开启事物_用一支洁面慕斯,开启精致生活
- jconsole是否可以在生产环境使用_jconsole使用
- 我的docker随笔20:多平台docker镜像下载
- 【Elasticsearch】es 插入数据 性能优化 以及 影响插入的因素
- 【clickhouse】Clickhouse 查询之 Array JOIN
- 【Clickhouse】Clickhouse 多路径存储策略
- 【java】java 如何抛出 sleep interrupted
- 【ElasticSearch 】ElasticSearch监控工具 cerebro
- 10-10-010-简介-重要概念背诵
- Spring :Spring Aop 创建代理