[国家集训队] 旅游 题解
题目大意
题目链接。
给定结点个数为 \(n\) 的有边权树,需要维护 \(m\) 次操作,分为如下 \(5\) 种:
- 修改某条边的边权。
- 对某条路径上的边的边权取为相反数。
- 查询路径上的边权和。
- 查询路径上边权的最大值。
- 查询路径上边权的最小值。
限制: \(1\le n, m\le 2\times 10^4\)。
解法
这是一道轻重链剖分边权转点权的模板题。
首先发现边权不易维护,但我们先前有用轻重链剖分维护点权的经验,所以考虑能否将边权移植为点权。
随后发现如果我们将每条边的边权赋给深度较深的那个点作为点权,每条边会唯一的赋到一个点上。
在这个前提上我们就可以通过轻重链剖分解决这个问题,剩下的都是线段树的模板。
需要注意的是,在边权转点权的题目中,在查询和修改时需要避开 \(u,v\) 的 \(\rm lca\)(因为 \(\rm lca\) 对应的是连接其与其父亲节点的点权,不在我们的查询范围内)。
此题需要注意结点从 \(0\sim n - 1\) 编号。