CF487E Tourist
题目大意:
给定一张无向图,每个点有点权。
有 \(q\) 次操作,分两种:
- 给定 \(u, w\),将点 \(u\) 的权值改为 \(w\)。
- 给定 \(u, v\),求出一条从 \(u\) 到 \(v\) 的简单路径,使得最小权值最小。
\(n,m,q \le 10^5, w \le 10^9\)
解题思路:
首先看到 "一条简单路径",大概有以下几种方法。
- dfs/bfs/dijkstra 但不能优化,时间复杂度有点高,不能通过此题。
- 点双+圆方树 可以将问题转化成路径上方点上的答案,不过这样做有要求,就是每个点双内部最优策略一定是唯一的。
但 \(min\) 加和显然满足 点双+圆方树 的要求。
所以可以使用圆方树。
有个点双的性质:点双中任意 \(x,y,z\),都存在一条 \(x -> y\) 的路径包含 \(z\)。
因为若不满足,那么 \(z\) 就是一个割点,不满足点双的定义。
那么路径上点双中的点的权值都可以被遍历到。
套路就是将每个圆点的答案挂在父亲(定为方点)上,那么相当于单点修,路径查询最小值。
树剖+线段树即可。
注意当 \(LCA\) 为方点的时候,要算上 \(LCA\) 的父亲(圆点)的答案。
\(O(n \log^2 n)\)。
总结:
这题好像评不上 *3200?感觉就是将套路拼起来了。
- 简单路径要分清圆方树能不能做。
- 圆方树有许多性质。
- 可以将圆点答案挂在父亲上,因为路径必经方点。

浙公网安备 33010602011771号