分层图总结

分层图

分层图主要就是通过将图分为几层,每层内部都有边,然后各层之间也有边,用于解决对边权进行操作且操作数少的题目。

Example

给一个无向图,求\(1 \to n\)的最短路径,其中可以选择不超过\(k\)条边让边的边权变为一半。 \(n \le 50,m \le 1000,k \le 50\)

考虑建立\(0,1,2,\cdots,k\)层共\(k + 1\)层图。定义\(P(x,y)\)为第\(y\)层的点\(x\)。每层内部都按照原图连边,然后考虑边\((u,v) \in E\),对于第\(i\)\(i + 1\)层(\(i + 1 \le k\)),连无向边\(P(u,i) \to P(v,i + 1)\)\(P(v,i) \to P(u,i + 1)\),边权为\(w / 2\)。然后跑一遍最短路,答案为\(\min_{i = 0} ^ k \{dis_{P(n,i)}\}\).

如果用pq优化的Dijkstra实现,时间复杂度为\(\mathcal{O}(mk + mk \log{mk})\)

Problem

一个无向图,求\(S \to T\)的最短路,一条路径的长度定义为路径上的边权和减去最大边权加上最小边权。

发现其实就是\(\sum_{w \neq w_{\max},w \neq w_{\min}} w + 2 \cdot w_{\max}\)
跑分层图即可。

posted @ 2021-08-24 23:51  luyiming123  阅读(116)  评论(0编辑  收藏  举报