当前位置: 首页 > news >正文

G004 DAG上DP P1685 游览 P4017 最大食物链计数 - 洛谷

P1685 游览 - 洛谷
P4017 最大食物链计数 - 洛谷

已知一个 DAG 和起点 \(s\) 终点 \(e\) 和从终点回起点的时间 \(t\) ,如果从起点到终点如果有多条可选择的路径,那么要全部走一遍。问总耗时多少(对 \(10000\) 取模)。

假如从 \(e\) 回到 \(s\) 的次数为 \(cnt_e\) ,不难看出返回起点的总时间为 \((cnt_e-1)\times t\)

初始化 \(cnt_s=1\) 其余为 \(0\) 按转移方程 cnt[v] += cnt[u] 递推

初始化 \(dp\) 数组定义为从起点到当前节点的总距离,转移方程为 dp[v] += dp[u] + cnt[u] * w

看图片更好理解第二个转移方程

转移方程执行流程图

具体代码为

import sys
from collections import deque
from math import inf
if 1:inp = lambda: sys.stdin.readline().strip()II = lambda: int(inp())MII = lambda: map(int, inp().split())LII = lambda: list(MII())Max = lambda x, y: x if x > y else yMin = lambda x, y: x if x < y else ydef main():n, m, s, e, t = MII()g = [[] for _ in range(n + 1)]din = [0] * (n + 1)for _ in range(m):u, v, w = MII()g[u].append((v, w))din[v] += 1dq = deque([i for i in range(1, n + 1) if din[i] == 0])cnt = [0] * (n + 1)cnt[s] = 1dp = [0] * (n + 1)while dq:u = dq.popleft()for v, w in g[u]:cnt[v] += cnt[u]dp[v] += dp[u] + cnt[u] * wdin[v] -= 1if din[v] == 0:dq.append(v)            ans = (cnt[e] - 1) * t + dp[e]print(ans % 10000)if __name__ == "__main__":main()

第二道题要比上一道简单,这里只需要统计经过多少次即可,初始化所有源点为 \(1\) 转移方程为前面的第一个转移方程 dp[v] += dp[u]

唯一要注意的点是结果是所有汇点的和

食物链条数图

具体代码为

# 模版代码直接复制即可
def main():n, m = MII()g = [[] for _ in range(n + 1)]din = [0] * (n + 1)dout = [0] * (n + 1)for _ in range(m):u, v = MII()g[u].append(v)din[v] += 1dout[u] += 1dq = deque([i for i in range(1, n + 1) if din[i] == 0])dp = [0] * (n + 1)for i in dq:dp[i] = 1while dq:u = dq.popleft()for v in g[u]:dp[v] += dp[u]dp[v] %= MODdin[v] -= 1if din[v] == 0:dq.append(v)print(sum(dp[i] for i in range(1, n + 1) if dout[i] == 0) % MOD)if __name__ == "__main__":main()
http://www.jsqmd.com/news/409400/

相关文章:

  • 数据库的操作
  • AI提示系统的商业竞争加剧,提示工程架构师的机会与风险在哪?
  • 大数据领域Zookeeper的故障排查与解决方案
  • Flink状态后端安全:RocksDB数据加密配置与性能调优
  • 中缀转后缀表达式
  • QA之二 - 单元测试--JUnit5
  • 本地AI,一键抠图
  • 网页源代码查看 在线工具分享
  • 科研前沿篇---神经网络前沿结构
  • 科研前沿篇---模型性能提升
  • 混合架构设计:Agent-Workflow-RAG-Skill协同方案
  • 控制鼠标的skill openclaw官方的skill
  • 大数据诊断性分析中的数据集成挑战与对策
  • 继承关系中访问权限的问题
  • 大模型常用术语
  • 图像分类__半监督
  • 从`vector`和`ArrayList`的区别联想到`ArrayList`线程安全问题
  • AI辅助的房地产投资分析
  • 告别反复登录:一文搞定 AWS CLI SSO 凭证自动刷新
  • C++游戏开发之旅 16
  • 大数据领域 Neo4j 与传统数据库的对比分析
  • ArgoCD部署与核心配置详解 - wanghongwei
  • 【Claude Code解惑】源码阅读利器:Claude Code 帮你梳理 Linux 内核模块逻辑
  • ArgoCD部署与核心配置详解及生产最佳实践 - wanghongwei
  • Hadoop与视频流分析:内容推荐系统
  • VsCode插件推荐---Todo Tree
  • OSPF 邻居无法建立的常见原因
  • 408真题解析-2010-41-数据结构-散列表
  • 【CTFshow-pwn系列】03_栈溢出【pwn 053】详解:逐字节爆破!手写 Canary 的终极破解
  • `static`局部变量与全局变量的区别,编译后映射文件是否包含此类变量的地址?