拓扑排序和DAG的一些心得
参考下面这个链接,有一些资源
toposort
https://oi-wiki.org/graph/dag/
Directed Acyclic Graph (有向无环图)
能拓扑排序肯定是DAG
然后就能用DP做很多事情:
1、DP 求最长(短)路
拓扑排序 + 动态规划,类似于 Dijkstra,但更快
dist[v] = max(dist[v], dist[u] + w);
dist[v] = min(dist[v], dist[u] + w);
2、有多少条不同的路径?
设 cnt[i] 表示从起点(如点1)到点 i 的路径条数。
初始时:cnt[1] = 1(起点到自身有一条路径),其它为 0。
cnt[v] += cnt[u];
这样遍历所有点后,就能知道从起点到终点的路径总数。
3、 路径中的最小/最大边数
min_edge[v] = min(min_edge[v], min_edge[u] + 1);
在基本Dijkstra的基础上进行扩展应用或改造
dij跑完之后,会生成 最短路径组成的 DAG(Shortest Path DAG)。
https://chatgpt.com/c/6811d9f1-5d98-800f-8790-406999984abc
变成DAG之后,就能用各种DP了
比如下图就是计算出从 1 开始的最短路径后的DAG:

然后我们就能用DP统计从 1 到 5 最短路数量


浙公网安备 33010602011771号