【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)\)。

浙公网安备 33010602011771号