题意:
给你一个食物链 DAG, 求最多有多少条食物链, 对结果取余 8011200280112002
思路:
想要找到一条 最大食物链 ,那么这条路径的 起点 入度要为0,终点 出度要为0。
故:既要记录入度,还要记录出度!
现在的问题转换成了,如何找到图中所有 左端点入度为0 且 右端点出度为0 的路径的数量

初始化所有入度为 0 的点的答案为1
拓扑排序 需要删除的点的答案 都累加到 它可以到达的点 上面去
最后累加所有 出度为0的点(最末尾消费者) 的答案,输出即可。

为什么要用拓扑排序 而不用搜索
如果是直接的搜索 会发现很多点的访问都会重复, 所以时间复杂度很高, 但是可以剪枝的(当走到一个多个入度节点的时候停下来, 等最后一个节点过来, 再继续搜下去), 这里不展开叙述
而拓扑排序可以大大减少一个节点的访问次数, 因此时间复杂度较优

#include <bits/stdc++.h>
using namespace std;const int MAXN = 5005;
const int mod = 80112002;
int n, m;
struct edge {int to, cost = 1;edge(int to) {this->to = to;}
};
vector<edge> e[MAXN];
int ru[MAXN], chu[MAXN];
int num[MAXN];
void slove() {queue<int> que;vector<int> ans;for(int i = 1; i <= n; i++) {if(!ru[i]) {num[i] = 1;que.push(i);}}while(!que.empty()) {int u = que.front();que.pop();ans.push_back(u);for(int i = 0; i < e[u].size(); i++) {edge x = e[u][i];--ru[x.to];if(!ru[x.to]) que.push(x.to);num[x.to] = (num[x.to] + num[u]) % mod;}}int u = 0;for(int i = 1; i <= n; i++) {if(!chu[i]) u = (u + num[i]) % mod;}cout << u << endl;
}int main() {cin >> n >> m;for(int i = 1; i <= m; i++) {int a, b;cin >> a >> b;e[a].push_back(edge(b));ru[b]++;chu[a]++;}slove();return 0;
}

解题记录 P4017 最大食物链计数 拓扑排序相关推荐

  1. 图解Topo拓扑排序 例题洛谷P4017 最大食物链计数

    适用条件:无环图 输出结果:使得每个节点,以它为终点的起点节点排都在其前面 作用:递推保证前面的节点都已经被使用过 实现方法:从没有入边的节点开始,输出并从其他节点中删去自己,重复此步骤直到所有节点都 ...

  2. 洛谷 P4017 最大食物链计数

    题目背景 你知道食物链吗?Delia 生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条.于是她来就来求助你,然而你也不会啊!写一个程序来帮帮她吧. 题目描述 给你一个食物 ...

  3. P4017 最大食物链计数

    题目背景 你知道食物链吗?Delia 生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条.于是她来就来求助你,然而你也不会啊!写一个程序来帮帮她吧. 题目描述 给你一个食物 ...

  4. 拓扑排序-信息学奥赛

    拓扑排序 制作人:(CwinSpider) 文章目录 拓扑排序 一.前置知识 二.知识讲解 1. 什么是拓扑排序? 2. 拓扑排序的实现 3. 拓扑排序的应用 4. 拓扑排序的复杂度分析 三.课堂练习 ...

  5. LeetCode 1786. 从第一个节点出发到最后一个节点的受限路径数(迪杰斯特拉 + 拓扑排序)

    文章目录 1. 题目 2. 解题 1. 题目 现有一个加权无向连通图. 给你一个正整数 n ,表示图中有 n 个节点,并按从 1 到 n 给节点编号:另给你一个数组 edges ,其中每个 edges ...

  6. 洛谷 最大食物链计数 python题解

    题目:P4017 最大食物链计数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 给你一个食物网,你要求出这个食物网中最大食物链的数量. (这里的"最大食物链&q ...

  7. P3573-[POI2014]RAJ-Rally【拓扑排序,二分+树状数组】

    正题 题目链接:https://www.luogu.com.cn/problem/P3573 题目大意 nnn个点mmm条边的DAGDAGDAG,删掉一个点使得最长路最短. 解题思路 先跑一遍拓扑排序 ...

  8. P1983 车站分级(拓扑排序)

    车站分级 题目传送门 解题思路 这题就是用拓扑排序分层 首先是建图 每进行一次输入,就将没有停靠的站与停靠的站都建立一条边 因为题目样例不怎么大,所以可以用邻接矩阵 for(int i=1;i< ...

  9. 拓扑排序——最大食物链计数(洛谷 P4017)

    题目选自洛谷P4017 这里具体讲一下为什么要用拓扑排序(思维过程): 1.这是一道图论题: 2.不是求最短路: 3.根据提示"最左端是不会捕食其他生物的生产者"可以想到,我们要入 ...

最新文章

  1. Tips系列之飞书日历
  2. spark 执行流程及各组件执行
  3. javaone_JavaOne 2012:观察与印象
  4. leetcode67. 二进制求和
  5. MyBatis 二级缓存
  6. Bailian2753 菲波那契数列(POJ NOI0202-1755)【数列+记忆化递归】
  7. java debug怎么用_debug怎么用
  8. 立项、合同、项目章程、可行性分析、建设方案、项目范围、关系等比较重要的部分
  9. matlab读取jpg图片出错,求助,Matlab读取图片进行分类。出现错误
  10. pngimg 可以商用吗_超级干货,30个无版权免费商用高清素材网站整理(设计师必备灵感源泉)...
  11. 有毒气体传感器代替金丝雀和老鼠在矿山
  12. python字母表_Python 一句话生成字母表的方法
  13. 2001-2019年290个地级市人均GDP
  14. windows 下使用nginx 实现负载均衡
  15. 基于springboot2.0跟layui构建的前后端分离后台管理系统
  16. 云服务器上部署仿牛客网项目
  17. AMOS从模型到分析
  18. Cohn-Kanade数据库
  19. Cadence电路原理图全部变成黄色如何解决?
  20. 树莓派开发系列教程2——树莓派上手使用

热门文章

  1. 配置邮箱和邮件大小限制 !
  2. Cocos2d-x 3.x中解决无法打开文件:“extensions/ExtensionMacros.h”
  3. iOS Keychain(钥匙串)原理及使用
  4. 直方图均衡化算法原理详解
  5. LED驱动电源不足,都有哪些原因
  6. Android手机通讯录
  7. 以太坊学习路线——(五)DApp开发:简易版去中心化微博
  8. 数字化引领LED照明的未来
  9. 彼岸夏花(一个爱与救赎的凄美故事)
  10. SSM+公寓管理系统 毕业设计-附源码171958