拓扑排序

拓扑排序-总结

母题

给定一个 DAG(有向无环图),如果从 uv 有边,则认为 v 依赖于 u。如果 uv 有路径(u 可达 v),则称 v 间接依赖于 u。我们将图中的顶点以线性方式进行排序,使得对于任何的顶点 uv 的有向边 (u,v),都可以有 uv 的前面。

拓扑排序的目标是将所有节点排序,使得排在前面的节点不能依赖于排在后面的节点。

例题

https://www.luogu.com.cn/problem/B3644

https://www.luogu.com.cn/record/178163992

习题

福建省历届夏令营-排序

核心思路是对于每次操作都进行一次拓扑排序,然后看是否出现循环依赖或者无法确定(即 maxqsize>1)。

Minimum Longest Trip G

拓扑排序求最长路,然后进行分层,按照拓扑排序的逆序操作进行第二次DP即可。

[CSP-S2020] 函数调用

本质上函数的嵌套调用就是一个DAG,利用拓扑排序考虑 addmul 运算即可。考虑母子节点的计算关系。

AcWing 164. 可达性统计

还是利用拓扑排序的逆序DP,每个位置 dpi,j 记录 ij 是否可达。利用 bitset按位或优化32倍常数。

[AcWing 477. 神经网络](AcWing 477. 神经网络)

直接按照要求按照拓扑序计算。

车站分级

考察虚拟节点优化 O(n2) 建边 ->O(n)

总结

总体分两类:

  1. 按照拓扑序计算答案。
  2. 按照逆拓扑序计算答案。

可能要做多次,或者像函数调用这样抽象,然后重点考察如何合并信息。也可以与其他数据结构,如 bitset 一起使用。或者同时运用两类方法进行DP。

边数过多可以考虑车站分级做法。

本文作者:wscqwq

本文链接:https://www.cnblogs.com/wscqwq/p/18429330

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wscqwq  阅读(6)  评论(0编辑  收藏  举报
历史上的今天:
2023-09-24 消失之物
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起