首页 > 其他分享 >P8290 填树 题解

P8290 填树 题解

时间:2024-11-20 21:45:54浏览次数:1  
标签:P8290 方案 分段 题解 填树 答案 多项式 取值 范围

题意:

给定一棵树,第 \(i\) 个点的赋值范围是 \([L_i,R_i]\)。计数:选择一条路径,将路径上的点赋值,使得极差 \(\le K\);并求出每种这样赋值方案的权值和。

\(n\le 200\),其余 \(\le 10^9\)。


看见极差,考虑枚举最小值 \(x\),然后统计 \([x,x+k]\) 的答案。

思路很简单,但是下一个问题是:\(x\) 的取值范围高达 \(10^9\),不可能单独枚举具体的值。

一般推到这里发现复杂度和值域有关就可以考虑转战其他思路了。但是这题就是不一样,根本没有其他思路,所以继续推。

这时候我们可以分段处理 \(x\)!就像高斯函数的分段性一样,如果每一段 \(x\) 的答案有相似性,就可以。

当取值范围很大的时候,尝试分段。

怎么分段?要使得每一段 \(x\) 的答案是相似的的,肯定要让每个点的取值范围在这段 \(x\) 中是相似的。那么一个点的取值范围是什么?\([L_i,R_i]\cap [x,x+k]\)。

要让 \([L_i,R_i]\cap [x,x+k]\) 有相似性,想到在 \(L,R,L-k,R-k\) 处分段。
这样,在分出的五段内部,点 \(i\) 的取值范围都是仅和 \(x\) 有关的(而不是和 \(x,L_i\)、\(x+k,R_i\) 的大小关系也有关)或和 \(x\) 无关。

这样分段得到 \(O(n)\) 个段,于是可以计算每个段的答案再求和。

勿忘初心:对于一个段的 \(x\),我们要统计最小权值为 \(x\) 的答案。记 \(S(l,r)\) 为权值在 \([l,r]\) 之间的答案,我们所要求的就是 \(S(x,x+k)-S(x+1,x+k)\)。

考虑 \(S(x,x+k)\) 怎么求。因为 \(S(x+1,x+k)\) 形式类似,只需考虑一个就行。

因为在一个段内,所以我们可以把每个点的取值范围都确定下来,形如 \([ax+b,cx+d]\)(这就是分了段的好处,上面没分段需要带 \(\min/\max\) 才能表示)。
我们发现:每个点的取值可能个数是关于 \(x\) 的一次函数。所以对于这一段的每一个 \(x\),它作为参数给树赋值的方案数都可以看作一个相同的多项式。

如果求出了这个多项式 \(f(x)\),设当前这一段为 \([L,R]\),则这一段的总方案数就是 \(f(L)+f(L+1)+\cdots +f(R)\)。

就算讲过然而到这里又卡住了 …… 果然是数学太菜了吧

因为每个点取值个数都是一次函数,所以 \(f\) 是一个 \(n\) 次多项式。令 \(g(x)=\sum_{i=L}^{x}f(i)\),则 \(g(x)\) 是 \(n+1\) 次多项式。

关于对 \(g(x)\) 是 \(n+1\) 次多项式的证明:CF622F The Sum of the k-th Powers 的参考
(粗略的说,\(g\) 的差分是 \(n\) 次多项式,所以 \(g\) 是 \(n+1\) 次多项式)

既然 \(g\) 是 \(n+1\) 次多项式,而 \(n\) 很小只有 \(200\),我们直接使用拉格朗日插值法,取 \(n+2\) 个点值就能求出 \(g(R)\),即 \(f(L)+\cdots +f(R)\)。
(取 \(l\sim \min(l+n+2,r)\) 的 \(f()\) 值做前缀和即为 \(g\) 在对应处的点值)

好的,我们现在只剩最后一个问题:当 \(x=x_0\) 时,怎么求 \(f(x)\)。
当 \(x\) 确定了,每个点的点权取值范围(进而方案数)也就确定了。

\(dp[x]\) 表示 \(x\) 子树内选一条端点为 \(x\) 的路径并确定路径上点权的方案数。计算 \(dp[x]\) 时采用树上背包合并子树的方式,可以在合并子树时统计所有 LCA 为 \(x\) 的路径贡献的方案数。
方案点权和也可以类似计算。

参考资料

标签:P8290,方案,分段,题解,填树,答案,多项式,取值,范围
From: https://www.cnblogs.com/FLY-lai/p/18554537

相关文章

  • Atcoder Regular Contest 059 题解
    ARC059C.BeTogether签到题。枚举要改成哪个,因为值域只有\([-100,100]\)。然后对总代价取个\(\min\)即可。#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constLLMAXN=105;LLn,A[MAXN];intmain(){ ios::sync_with_stdio(false); cin.ti......
  • [题解]CF1685B Linguistics
    @hzjoiineg为什么是神?思路首先将\(S\)中A的数量不等于\(a+c+d\)的情况判掉。然后将\(S\)划分为ABAB...和BABA...的若干段,对于长度为奇数的段构造方案只能是如下构成:A开头为例):AB和BA共\(\lfloor\frac{len}{2}\rfloor\)个,再加一个A。将\(a\)减一,并用......
  • Atcoder Regular Contest 058 题解
    ARC058C.Iroha'sObsession*1174\(n\)再大一点的就是巨大恶心分类讨论。但我们注意到\(n\leq10^4\),所以我们可以直接暴力枚举然后写个check。首先我们先把被ban掉的数存标记一下。然后从\(n\)开始往上查,一直查到\(10^6\)基本就可以了。然后每次检查一下有没有数位被......
  • 2022沈阳D题题解
    2022沈阳D题题解​ 这题在VP的时候成功把我卡死了,原因是我一直没有想到用KMP去大力匹配,导致我的算法复杂度一直是O(n^2logn),然后就很典的T了。​ VP完了之后想各种优化卡过去,但是都失败了,跑校园跑的时候突然想到怎么解了。​ 现在我是这样看待这个问题的,这个问题应该是可以被拆......
  • rk3588 银河麒麟自动锁屏问题解决
    rk3588适配的银河麒麟在设置-》电源选项中设置“从不”后依然会触发自动锁屏。通过gsettings设置依然无效。gsettingssetorg.ukui.screensaveridle-delay-1gsettingssetorg.ukui.screensaveridle-lock-1gsettingssetorg.ukui.screensaveridle-activation-enabledfa......
  • QT5.15.2 连接MySQL 驱动问题解决方案,无论菜鸟️还是老鸟,解决了就是好鸟
    最近在学QT,现在QT只能在线安装了,用了几天,看到数据库时,需要用MySQL,结果出现了问题。QSqlDatabase:QMYSQLdrivernotloaded、QSqlDatabase:availabledrivers:QSQLITEQODBCQODBC3QPSQLQPSQL7、Sqlconnectfailed、"DrivernotloadedDrivernotloaded"网上找到很多......
  • CF1846题解
    洛谷题面T1,T2,T4没什么价值,建议跳过,在此不提供T1,T2题解,套题T5,T7较为精彩,个人安利一下T3题面翻译给定 n个人做 m个题的时间分布情况,每题得一分,每题的完成时间是这道题的罚时,排名按照得分为第一关键字升序,罚时为第二关键字降序,计算在所有人都按最优顺序做题的情况下,第 1个......
  • 【题解】洛谷:P8593 「KDOI-02」一个弹的投
    P8593「KDOI-02」一个弹的投物理题。首先你要搞懂什么时候会炮弹碰撞,结论:y坐标相同时,水平位置\(x_i\lex_j\)且落点满足\(d_i\ged_j\),两炮弹必然碰撞。但是为什么呢,像我这种完全没学高中物理的伪高中生就不会了,下落时每个物体的相对的高度差是不变的,因为根据伽利略运动独......
  • P11290 【MX-S6-T2】「KDOI-11」飞船 题解
    注意到速度的形式是编号相乘,而又有\(x\in\{1,2,3,4\}\),所以最多\(\log_2y_i\)次速度就会达到\(10^9\)量级,而此时再加油最少需要\(1\)秒,所以再乘一定不优。直接dp,有\(f_{i,j,k}\)表示当前在第\(i\)个加油站,速度为\(2^j3^k\)的最短用时,后面的\(2^j3^k\)可以......
  • CF1678题解
    CF1678A小清新签到题,有0其余全与0合并,有相等的数先变为0再与0合并,没有相等的数先花1的代价合并为相等的数CF1678B因为最后对于一个合法的串,要求连续段长度为偶数,所以,我们只关心一个偶数位二元组\((1,2),(3,4)\dots\)两个对应的数是否相等若不相等,我们只能把这个数对全改为0......