【AT_abc294_g 题解】

题意

给定一颗 \(n\) 个节点的带权无向树。

给出 \(q\) 个操作:

  • 1 i w:把第 \(i\) 条边的边权变成 \(w\)
  • 2 u v:求 \(u\to v\) 简单路径的边权和。

解法

根据树上差分。

\(p\to \textrm{lca}(x, y)\)

\(u\to v\) 简单路径的边权和为 \(d(u)+d(v)-2d(p)\)

详见 oi-wiki

其中 \(d(i)\) 表示 \(i\to r\) 边权和的差分数组,\(r\) 为根节点。

本题需要支持修改操作,我们可以用树状数组/线段树来维护 \(d\)

具体的,对于无向边 \((u, v)\) \(u\)\(v\) 的儿子,则我们发现只对以 \(u\) 为根的这颗子树的 \(d\) 有影响。

那么我们可以先求出 dfs 序,然后就转换成了区间加,单点查询,可以用树状数组/线段树维护。

时间复杂度:\(\mathcal O(n\log n+q\log n)\)

代码。

posted @ 2023-03-20 22:27  hcywoi  阅读(32)  评论(0)    收藏  举报

Loading