.article-info-tag,button{text-transform:uppercase}.day,.postMeta,.postSticky{position:relative}.postTitle a:link,html{-webkit-tap-highlight-color:transparent}#blog-calendar,.code-copay-btn,.code-hljs-len,.hidden{visibility:hidden}#EntryTag,#blogTitle h1{margin-top:20px}#EntryTag a,.postSticky{background:#6fa3ef}#blogTitle h1 a:hover,.dayTitle a,a,a:active,a:link,a:visited{color:#5c8ec6}#calendar table a:hover,#navList a:hover,.postDesc a:hover,a:active,a:hover,a:link,a:visited,button{text-decora…ryTag a:visited{color:#666}#BlogPostCategory a,#EntryTag a{height:20px;line-height:20px;color:#fff!important;padding:3px 5px;border-radius:3px;margin:2px 5px 0;text-decoration:none;font-size:14px}#BlogPostCategory a:hover,#EntryTag a:hover{transition:all .3s linear 0s;opacity:.8}#topics .postDesc{padding-left:0;width:100%;text-align:left;color:#666;margin-top:5px;background:0 0}.feedbackListSubtitle-louzhu:after,.feedbackListSubtitle:after,.feedbackListSubtitle:before{top:11px;right:100%;left:-1

[国家集训队] 旅游 题解

题目大意

题目链接

给定结点个数为 \(n\) 的有边权树,需要维护 \(m\) 次操作,分为如下 \(5\) 种:

  1. 修改某条边的边权。
  2. 对某条路径上的边的边权取为相反数。
  3. 查询路径上的边权和。
  4. 查询路径上边权的最大值。
  5. 查询路径上边权的最小值。

限制: \(1\le n, m\le 2\times 10^4\)

解法

这是一道轻重链剖分边权转点权的模板题。

首先发现边权不易维护,但我们先前有用轻重链剖分维护点权的经验,所以考虑能否将边权移植为点权。

随后发现如果我们将每条边的边权赋给深度较深的那个点作为点权,每条边会唯一的赋到一个点上。

在这个前提上我们就可以通过轻重链剖分解决这个问题,剩下的都是线段树的模板。

需要注意的是,在边权转点权的题目中,在查询和修改时需要避开 \(u,v\)\(\rm lca\)(因为 \(\rm lca\) 对应的是连接其与其父亲节点的点权,不在我们的查询范围内)。

此题需要注意结点从 \(0\sim n - 1\) 编号。

点此查看代码

posted @ 2022-02-24 00:14  feicheng  阅读(15)  评论(0编辑  收藏  举报