CF487E Tourist

题目大意:

给定一张无向图,每个点有点权。
\(q\) 次操作,分两种:

  1. 给定 \(u, w\),将点 \(u\) 的权值改为 \(w\)
  2. 给定 \(u, v\),求出一条从 \(u\)\(v\) 的简单路径,使得最小权值最小。
    \(n,m,q \le 10^5, w \le 10^9\)

解题思路:

首先看到 "一条简单路径",大概有以下几种方法。

  1. dfs/bfs/dijkstra 但不能优化,时间复杂度有点高,不能通过此题。
  2. 点双+圆方树 可以将问题转化成路径上方点上的答案,不过这样做有要求,就是每个点双内部最优策略一定是唯一的。

\(min\) 加和显然满足 点双+圆方树 的要求。
所以可以使用圆方树。

有个点双的性质:点双中任意 \(x,y,z\),都存在一条 \(x -> y\) 的路径包含 \(z\)
因为若不满足,那么 \(z\) 就是一个割点,不满足点双的定义。

那么路径上点双中的点的权值都可以被遍历到。
套路就是将每个圆点的答案挂在父亲(定为方点)上,那么相当于单点修,路径查询最小值。
树剖+线段树即可。
注意当 \(LCA\) 为方点的时候,要算上 \(LCA\) 的父亲(圆点)的答案。
\(O(n \log^2 n)\)

总结:

这题好像评不上 *3200?感觉就是将套路拼起来了。

  1. 简单路径要分清圆方树能不能做。
  2. 圆方树有许多性质。
  3. 可以将圆点答案挂在父亲上,因为路径必经方点。
posted @ 2025-04-27 00:13  positive_deviation  阅读(10)  评论(0)    收藏  举报