首页 > 其他分享 >重建计划 题解

重建计划 题解

时间:2024-04-20 23:24:04浏览次数:18  
标签:子树 dep 题解 路径 计划 深度 长度 单调 重建

题意:一棵树,有边权,求边权平均值最大且经过点数在 \([L,R]\) 的路径长度.

Solution

首先二分答案 \(x\),每条边权减去 \(x\) 后问题转为求最大路径长度,若答案 \(\ge0\) 则可行

1

边分治保平安。

  • 先转二叉树,这里有两种方法:一种是像线段树一样建,另一种是普通贪心的建,反正都可以
  • 然后边分治,对于重心边 \((u,v)\) 两头的子树,容易想到对于 \(u\) 处理出数组 \(f_i\) 表示路径长度为 \(i\) 的到 \(u\) 的最大路径长度,\(v\) 类似地处理出 \(g\)
  • 对于 \(g_i\),要求 \(\max_{j\in[L-i..R-i]}f_j\),单调队列即可

2

点分治:

  • 对于当前根 \(u\),依次处理子树,设当前处理到子树 \(v\)
  • 处理出 \(f_i\) 表示子树 \(v\) 前面的所有子树中 \(u\) 到其中一个点,深度为 \(i\) 的最大路径长度值,这个可以依次更新
  • BFS 当前子树 \(v\),设到当前节点 \(p\),深度为 \(dep\),我们要求 \(\max_{j\in[L-dep...R-dep]}f_j\)
  • 由于 BFS 节点的深度单调递增,查询区间单调递减,所以单调队列即可
  • 注意若要使复杂度正确,即遍历复杂度为 \(siz_u\),我们需要把儿子按他们子树深度最大值排序,这样 \(v\) 最多用到前一个子树深度最大值这么多个 \(f\),就正确了
  • 有个优化:预处理出点分树,这样就不用每次二分都求一遍重心

不知为何我的代码思路是对的但总是谜之 TLE……反正思路会了应该就行了

UPD:把 unordered_map 换成 map 就过了…………………………

标签:子树,dep,题解,路径,计划,深度,长度,单调,重建
From: https://www.cnblogs.com/laijinyi/p/18148395

相关文章

  • 题解:P10365 [PA2024] Kraniki(评分:8.4)
    前言我们一场模拟赛的题,结果原题是新鲜出炉的。小弟不才,感觉这题是做过的题中几乎最复杂的了。既然搞懂了,就来写一发题解吧。(题外话:目前最优解,我的常数真是小小又大大啊)"Upanddown,glowin'round..."Solution1、一个经典的Trick直接模拟每一种情况显然不可取,考虑计算每......
  • 染色问题 题解
    \(f(i)\):满足\(n\)行\(m\)列每行每列都有颜色,最多用了\(j\)种颜色的方案数根据容斥原理\[f(i)=[(i+1)^m-1]^n-\sum_{i=1}^m(-1)^{k-1}C_m^k[(i+1)^{m-k}-1]^n\]意思是对于每一行,每个格子都可以填\(i\)种颜色或不填;但是整行不能一个格子都不填色,所以减一;而有\(n\)行,......
  • 俄罗斯方块 题解
    题意:矩阵checkmax、矩阵求max,checkmax的值一定比当前矩阵原max大外层线段树每个节点开一棵线段树,每个点记录列的max与checkmax的标记checkmax时:对路过的点的max更新,对完全包含的区间的checkmax标记更新求max时:对路上的checkmax与完全包含的max更新\((a,b......
  • P3281 数数 题解
    j带来的贡献:\(f[i]*b^{j-i}+\sum(i\cdot\text{num}[i+1..j])+pre_{j-i}\)\(\displaystyle\sum_{j=i+1}^n\left\{f[i]*b^{j-i}+i\cdot\dfrac{b^{j-i}(b^{j-i}-1)}2+pre_{j-i}\right\}\)\(\displaystyle\sum_{j=1}^{n-i}\left\{f[i]*b^j+i\cdot\dfrac{b^j(......
  • ABC350题解(E-G)
    E直接搜一下\(N\)的可能到达的值的个数,发现不多(大约\(10^4\)个),直接暴力dp(记忆化搜索)。转移式\(f_i=\max(X\log_{A}N,\dfrac{\sum\limits_{j=1}^6f_{i/j}}{6}+Y)\)。化简得到\(f_i=\max(X\log_{A}N,\dfrac{\left(\sum\limits_{j=2}^6f_{i/j}\right)+6Y}{5})\)。F文艺......
  • 荒岛野人 题解
    Statement有\(n(\le15)\)个野人,第\(i\)个野人的寿命是\(L_i(\le10^6)\)年。荒岛上有\(m\)个山洞排列成一个环,但你不知道\(m\)到底是多少。第\(i\)个野人第一年会从第一个山洞开始往后数\(C_i\)个住下来,此后每一年都会往后数\(P_i\)个山洞住下来。已知不会发生某......
  • 双模数问题 题解
    Statement\(S(n,m)=\{k\midk\in\mathbbN^+\landn\bmodk+m\bmodk\gek\}\),求\(\varphi(n)\varphi(m)\sum_{k\inS(n,m)}k\pmod{998244353}\)(\(n,m\le10^{15}\))Solution欧拉函数怎么求就不说了,可以\(\mathcalO(\sqrtn)\)解决\(n\bmodk+m\bmodk......
  • [HEOI2014]大工程 题解
    发现可以直接建立虚树。设\(dp_{u,0/1/2}\)表示第\(u\)个节点的子树内,所有选中节点到它的距离之和/选中节点中到它的最短距离/选中节点中到它的最长距离,\(as_{u,0/1/2}\)则代表对于这个子树,题目所问问题的三个答案,\(i1,i2\)分别为使\(dp_{u,1/2}\)取极值的\(v\)。则\(......
  • [题解] [洛谷 P1174] 打砖块
    [洛谷P1174]打砖块题目描述有\(n\)行\(m\)列的砖块和\(k\)发子弹,每个砖块都有一个得分,每次可以用一发子弹打碎某一列最下面的砖块并得到相应的得分。有的砖块在打碎后可以获得一发额外子弹的奖励。求该游戏的最大得分。输入格式第一行有\(3\)个正整数,\(n,m,k\)。......
  • [题解] [洛谷 P1174] 打砖块
    [洛谷P1174]打砖块题目描述有\(n\)行\(m\)列的砖块和\(k\)发子弹,每个砖块都有一个得分,每次可以用一发子弹打碎某一列最下面的砖块并得到相应的得分。有的砖块在打碎后可以获得一发额外子弹的奖励。求该游戏的最大得分。输入格式第一行有\(3\)个正整数,\(n,m,k\)。......