分层图总结
分层图
分层图主要就是通过将图分为几层,每层内部都有边,然后各层之间也有边,用于解决对边权进行操作且操作数少的题目。
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
- P4822 [BJWC2012]冻结
就是上面的例子。 - P4568 [JLOI2011]飞行路线
一个套路。 - 某模拟赛题/某CF题
一个无向图,求\(S \to T\)的最短路,一条路径的长度定义为路径上的边权和减去最大边权加上最小边权。
发现其实就是\(\sum_{w \neq w_{\max},w \neq w_{\min}} w + 2 \cdot w_{\max}\)
跑分层图即可。