题目:P4017 最大食物链计数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目描述

给你一个食物网,你要求出这个食物网中最大食物链的数量。

(这里的“最大食物链”,指的是生物学意义上的食物链,即最左端是不会捕食其他生物的生产者,最右端是不会被其他生物捕食的消费者。)

Delia 非常急,所以你只有 1 秒的时间。

由于这个结果可能过大,你只需要输出总数模上 80112002 的结果。

输入格式

第一行,两个正整数 n、m,表示生物种类 n 和吃与被吃的关系数 m。

接下来 m 行,每行两个正整数,表示被吃的生物A和吃A的生物B。

输出格式

一行一个整数,为最大食物链数量模上 8011200280112002 的结果。

题目分析:

记 s[ i ] 为:到达节点 i 的食物链的个数。我们可以知道s【i】 = sum(所有被节点 i 吃的节点)。以这个条件我们可以写出以下代码。用字典记录,每个节点的入度,出度,指向的节点名与食物链的条数。

我们知道入度为零的点就表示他是生产者。生产者的食物链数记为一(这样才能加出数据)。这个节点用完后就将其指向的节点的入度减一。判断入度是否为零。为零则加入队列。

代码如下:

n, m = map(int, input().split(' '))
mem = dict()
for i in range(1, n + 1):mem[i] = [0, 0, [], 0]  # 入, 出, 出点. 食物链条数
b = [i for i in range(1, n + 1)]  # 生产者列表
e = [i for i in range(1, n + 1)]  # 最终消费者列表for i in range(m):  # 数据输入prey, predator = map(int, input().split(' '))if prey in e:    # 如果最终消费者中的数据是猎物那就删掉e.remove(prey)if predator in b: # 如果初始生产者中的数据是消费者那就删掉 b.remove(predator)mem[prey][1] += 1mem[prey][2].append(predator)mem[predator][0] += 1for i in b:mem[i][3] += 1 # 初始生产着食物链条数加一while b:   # 遍历初始生产者列表step = b.pop() if mem[step][1] == 0:  # 如果是最终消费者就不计算continuefor i in mem[step][2]: # 否则给他指向的点都加上 本节点的食物链条数,且入度减一mem[i][3] += mem[step][3]  mem[i][0] -= 1mem[i][3] = mem[i][3] % 80112002  # 这里按要求mod一开始我忘了,只通过了20%if mem[i][0] == 0:b.append(i)  #如果入度为零就添加进队列ans = sum([mem[i][3] for i in e])% 80112002  # 求和取模
print(ans)

此代码只是进行了简单的模拟,无法通过所有的节点(最后两个测试点超时)。让我们分析一下哪部分的代码可以优化一下。

洛谷 最大食物链计数 python题解相关推荐

  1. 洛谷P1129 [ZJOI2007] 矩阵游戏 题解

    洛谷P1129 [ZJOI2007] 矩阵游戏 题解 题目链接:P1129 [ZJOI2007] 矩阵游戏 题意:给定一张有黑白棋子的正方形棋盘,问存不存在解法使得经过若干次交换行或列的操作后,左上角 ...

  2. 洛谷P3336 [ZJOI2013]话旧 题解

    洛谷P3336 [ZJOI2013]话旧 题解 题目链接:P3336 [ZJOI2013]话旧 题意:小林跟着银河队选手去了一趟宇宙比赛,耳濡目染,变得学术起来.回来后,他发现世界大变样了.比丘兽究级 ...

  3. 洛谷P4683 [IOI2008] Type Printer 题解

    洛谷P4683 [IOI2008] Type Printer 题解 题目链接:P4683 [IOI2008] Type Printer 题意: 你需要利用一台可移动的打印机打印出NNN个单词.这种可移 ...

  4. 洛谷P3647 [APIO2014] 连珠线 题解

    洛谷P3647 [APIO2014] 连珠线 题解 题目链接:P3647 [APIO2014] 连珠线 题意: 在达芬奇时代,有一个流行的儿童游戏称为连珠线.当然,这个游戏是关于珠子和线的.线是红色或 ...

  5. 洛谷P4170 [CQOI2007]涂色 题解

    洛谷P4170 [CQOI2007]涂色 题解 题目链接:P4170 [CQOI2007]涂色 题意: 假设你有一条长度为 555 的木板,初始时没有涂过任何颜色.你希望把它的 555 个单位长度分别 ...

  6. 洛谷P1868 饥饿的奶牛 题解

    洛谷P1868 饥饿的奶牛 题解 题目链接:P1868 饥饿的奶牛 题意: 有一条奶牛冲出了围栏,来到了一处圣地(对于奶牛来说),上面用牛语写着一段文字. 现用汉语翻译为: 有 NNN 个区间,每个区 ...

  7. 洛谷P1462 通往奥格瑞玛的道路 题解

    洛谷P1462 通往奥格瑞玛的道路 题解 题目链接:P1462 通往奥格瑞玛的道路 题意:在艾泽拉斯,有 nnn 个城市.编号为 1,2,3,-,n1,2,3,\ldots,n1,2,3,-,n . ...

  8. 洛谷 P2015 二叉苹果树 题解

    洛谷 P2015 二叉苹果树 题解 洛谷 P2015 题目 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有NNN个结点(叶子点或者树枝分叉点),编号为1-NNN ...

  9. 洛谷P3879 [TJOI2010] 阅读理解 题解

    洛谷P3879 [TJOI2010] 阅读理解 题解 题目链接:P3879 [TJOI2010] 阅读理解 题意: 英语老师留了 NNN 篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节 ...

最新文章

  1. 【1】用命令行搭建Vue项目
  2. linux ssh密钥认证
  3. mysql多实例(三种方法)
  4. 【洛谷 2330】繁忙的都市
  5. python summary结果提取_Python coverage.summary方法代码示例
  6. ERROR:Tried to register widget id ==basemapGalleryDiv but that id is already registered解决办法
  7. flatform installer web 安装php_web安装平台-微软web服务器配置安装工具(Web Platform Installer)5.0 官方最新版-东坡下载...
  8. DE26 Continuation: Repeated Real Eigenvalues
  9. Linux内核原子操作及函数
  10. windows下命令行发送邮件blat.exe
  11. 95后软件测试工程师成长指南
  12. 远程命令行添加(删除)注册表键值(远程打开)
  13. Windows10家庭版更改C盘用户user文件夹名称(小新pro13亲测有效)
  14. 使用java调用阿里云车牌识别API
  15. C++模板与泛型编程:模板特例化
  16. 【数据分析】—— 指标与指标体系
  17. SSL集训 2021.07.16 提高B组 T1 下棋【博弈论】
  18. 频繁撤单有风险?--这些委托类型让您享受“撤单豁免权”
  19. 2011年成都信息工程学院第二季极客大挑战逆向第三题Game破文
  20. 身体指数bmi流程图_BMI指数事关重大,你家娃合不合格赶紧来对表查!

热门文章

  1. TFT-eSPI 库在 ESP32 上的配置和使用(ESP32 for Arduino)
  2. 编程练习题 没答案版
  3. Android Camera 开发常见专业术语名词解释
  4. 【黑马程序员pink老师前端】JavaScript对象
  5. 学完理论后在收藏夹里吃灰?接着教你实操创建主数据库
  6. 计算机组成原理实验四微程序,计算机组成原理实验七微程序计数器.doc
  7. 梦想贩卖机v2版本1.0.69无限制版小程序源码{已修复助力和瀑布流问题}
  8. 伯克利计算机与经济学双专业,伯克利有经济学专业排名,最新的深入解析
  9. PHP、Java、Python、C、C++ 这几种编程语言都各有什么特点或优点?
  10. 费诺编码 c++代码实现 信息论实验