CCPC 2022 桂林站 G题解

题意:树上随便选两个路径,有点权,只被一个路径覆盖的点权有效,求最大值

两种情况 一种是只有一个交点,一种无交点,无交点我们可以通过断一条树边求分别两边的最大值,记为f与g f为断u与fa后 u子树的最大值,这个比较简单,就是套路的最大次大, 然后是g

我是打死想不到O(n)的转移,没脑子 ,考虑g什么时候最简单,可以初始化 答案是 为1连着的节点时g最简单  此时情况就是断掉这个子树,将其他的最长次长链求一个和,然后取其他f[v]最大值即可,这个东西用multiset维护一下 

接着是转移考虑父亲到子节点的变化 我们会多出来除了一个节点外的其他子嗣,需要将这些子嗣最长的直的链跟往上最大的链取一个最大值,这个往上最大的链子其实不一定就只到一,它可能穿过其他儿子 ,这个东西又可以用multiset维护 然后g[v]大概就完了

最后对于空心的四条链子 这个东西还是要用multiset 搞一下 

最后给个图吧 对于g的转移没图还是说不清的

 

 如图,它会多出来除了v以下的x其他的子嗣

#include <bits/stdc++.h>
using
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值