拓扑排序

hihocoder 1175

拓扑只适用于 有向无环图中,这个指的是

1.有向的,不是那种双向可走的

2.无环,并不是不存在环,而是一定要有一个没有其他点指向这个点的点,

题目大意:一个有向无环图n个点,m个边,其中随机往里面投k个病毒,病毒传下个点时会复制以至于原先的点病毒数量不变,而下个点得到的病毒数量和原先的点的病毒数量相等,问最后,所有点一共多少个病毒;

分析:该题中,如果用dfs写的话,有种斐波那契的感觉,数据大过不了;

所以用到拓扑

附上代码,有注释

 #include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <string>
#include <map>
#include <iomanip>
#include <algorithm>
#include <queue>
#include <stack>
#include <set>
#include <vector>
//const int maxn = 1e5+5;
#define ll long long
#define MAX INT_MAX
#define FOR(i,a,b) for( int i = a;i <= b;++i)
#define MOD 142857
using namespace std; vector <int> vec[];    //用来存路径,例如a能到b,那么vec[a].push_back(c);
int v[];          //用来存这个点的病毒个数  
  int indegree[];      //用来存还有多少个点能到这个点(开始的时候indegree[k]==0,就代表k是起点
int n,m ,k,woc,a,b,head,temp,ans;
queue<int>que;        //用来存从删去的点(接下来开始计算v[]的点
int main()
{
// freopen("D:\\common_text\\code_stream\\in.txt","r",stdin);
// freopen("D:\\common_text\\code_stream\\out.txt","w",stdout);
cin>>n>>m>>k;
FOR(i,,k)
{
cin>>woc;
v[woc]++;
}
FOR(i,,m)
{
cin>>a>>b;
vec[a].push_back(b);
indegree[b]++;
}
for(int i=;i<=n;++i)
{
if(indegree[i]==)
{
que.push(i);
}
}
while(!que.empty())
{
head=que.front();
que.pop();
ans+=v[head];
ans%=MOD;
for(int i=;i<vec[head].size();++i)
{
temp=vec[head][i];
v[temp]+=v[head];
v[temp]%=MOD;
if(--indegree[temp]==)  //已经没有点到这个点了
{
que.push(temp);
}
}
}
cout<<ans%MOD;
}

hihocoder 1175的更多相关文章

  1. hihoCoder #1175 : 拓扑排序·二

    题目链接:http://hihocoder.com/problemset/problem/1175 代码实现如下: #include <queue> #include <cstdio ...

  2. hihoCoder 1175:拓扑排序二

    题目链接: http://hihocoder.com/problemset/problem/1175 题目难度:一星级(简单题) 今天闲来无事,决定刷一道水题.结果发现这道水题居然把我卡了将近一个钟头 ...

  3. hihoCoder#1175拓扑排序应用

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho所在学校的校园网被黑客入侵并投放了病毒.这事在校内BBS上立刻引起了大家的讨论,当然小Hi和小Ho也参与到了 ...

  4. hihoCoder #1175 : 拓扑排序&#183;二

    [题目链接]:click here~~ 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi和小Ho所在学校的校园网被黑客入侵并投放了病毒.这事在校内BBS上立马引 ...

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

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

  6. hihocoder -1121-二分图的判定

    hihocoder -1121-二分图的判定 1121 : 二分图一•二分图判定 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Net ...

  7. Hihocoder 太阁最新面经算法竞赛18

    Hihocoder 太阁最新面经算法竞赛18 source: https://hihocoder.com/contest/hihointerview27/problems 题目1 : Big Plus ...

  8. hihoCoder太阁最新面经算法竞赛15

    hihoCoder太阁最新面经算法竞赛15 Link: http://hihocoder.com/contest/hihointerview24 题目1 : Boarding Passes 时间限制: ...

  9. 【hihoCoder 1454】【hiho挑战赛25】【坑】Rikka with Tree II

    http://hihocoder.com/problemset/problem/1454 调了好长时间,谜之WA... 等我以后学好dp再来看为什么吧,先弃坑(╯‵□′)╯︵┻━┻ #include& ...

随机推荐

  1. windows配置nginx实现负载均衡集群 -请求分流

    windows配置nginx实现负载均衡集群 一.windows上安装nginx 1.下载nginx的windows版本http://nginx.org/en/download.html 2.把压缩文 ...

  2. laravel 预加载特定的列

    /**订单列表 0 已删除 1执行中 2 已过期 * * @param Request $request * * @return \Illuminate\Contracts\View\Factory| ...

  3. 微信支付之01------获取订单微信支付二维码的接口------Java实现

    [ 前言:以前写过一个获取微信二维码支付的接口,发现最近公司新开的项目会经常用到,现在我又翻出代码看了一遍,觉得还是把整个代码流程记下来的好 ] 借鉴博客: 他这篇博客写得不错,挺全的:https:/ ...

  4. OpenCV4.1.0实践(1) - 环境配置及使用

    Pycharm下虚拟环境配置 1.下载whl文件 下载地址:python extension packages 搜索opencv,根据自己的版本下载,我用的python版本是3.5.2,64位: 2. ...

  5. sh -c

    在Linux使用 echo 并配合命令重定向是实现向文件中写入信息的快捷方式. 比如要向 test.asc 文件中随便写入点内容,可以: $ echo "信息" > test ...

  6. Python openpyxl : Excel 文档简单操作

    安装方法 使用 pip 或通过专门python IDE(如pyCharm)进行安装 其中pip安装方法,命令行输入:  pip install openpyxl 基本使用 第一步先是要导入 openp ...

  7. webpack基本用法

    1. 压缩代码(production模式) optimization: { minimizer: [new UglifyJsPlugin({ cache: true, parallel: true, ...

  8. 【算法】欧几里得算法与青蛙约会oj

    欧几里得和扩展欧几里得算法 题目: poj 1061 poj 2142 双六 扩展欧几里得算法详解 先说欧几里得算法:欧几里得算法辗转相除求\(gcd\).求\(a.b\)的\(gcd\),则利用的性 ...

  9. nginx 项目部署

    一.nginx 想必我们大多数人都是通过访问网站而开始接触互联网的吧.我们平时访问的网站服务 就是 Web 网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务. Web 网络服务是一种被 ...

  10. 内置函数(sorted、map、enumerate、filter、reduce)

    1.sorted() 语法: sorted(iterable, cmp=None, key=None, reverse=False) 把iterable中的items进行排序之后,返回一个新的列表,原 ...