欲望加速!!!!!

像题解/游记一样的东西挂在这里了。
技巧之类的东西挂在这里了。

E - 「KDOI-11」彩灯晚会

不妨猜测,这里的平方只需要维护 \(0/1/2\) 次项就能过,即它带来的复杂度是 \(O(1)\) 的。发现不行。

不妨拆贡献,发现不行。

不妨考虑平方的组合意义。可以在原图中选任意两条点数\(l\) 的链,定义一条链的权值为其边权的乘积,一个选择方案的权值为其两条链权值的乘积,那么答案即为所有选择方案的权值和。

看起来非常酷炫!不过这里相当于是在对只有一种颜色的图计数。考虑上颜色其实也比较简单,我们只需要这两条链的点集的并同色就行了。

到这里就有一个酷炫的 DP 做法。设 \(dp_{u1,u2,l1,l2}\) 表示两条链开头分别是 \(u1\)\(u2\),长度分别是 \(l1\)\(l2\) 时的答案。每次转移选 \(u1,u2\)拓扑序较小的点走一步,如果 \(u1=u2\) 就优先走 \(u1\)。设 \(c\) 为两条链的交集大小,那么一种选择方案对应的染色数就应该是 \(k^{n-2l+c+1}\)。于是每次发现 \(u1=u2\) 时再额外乘一点东西就行了。这个显然是对的。时间复杂度 \(O(n^3l^2)\)

优化不了。很烦。注意到我们只关心交集的大小,所以也许状态里只需要记交集中的点。

\(dp_{u,l1,l2,c}\) 表示两条链最后一次相交在点 \(u\),长度分别是 \(l1\)\(l2\),且交点共有 \(c\) 个时的方案数。这样做直接做就是 \(O(n^2l^5)\) 的。可以预处理 \(g_{u,v,l}\) 表示 \(u\)\(v\) 长度为 \(l\) 的路径数量,发现要套一层二项式反演。

两维卷积可以分部算,复杂度 \(O(n^2l^4)\)

怎么优化呢?推一推式子,发现外层的二项式反演可以拆开,只需要在转移时搞一点系数就行了。于是 \(c\) 那一维不用记录了。时间复杂度 \(O(n^2l^3)\),可过。

F - 构造数组

好题啊。

D - Subtree Value

考虑我们能做什么。设 \(g(x,k)\) 表示,附加权值为 \(k\) 时所有大小为 \(x\) 的连通块的权值之和。我们可以在固定 \(k\) 的情况下求出所有 \(g(x,k)\),其中 \(x\in[1,n]\)

容易发现,\(g(x,kU+r)\)\(x,U,r\) 均为定值的情况下是一个关于 \(k\)\(V-1\) 次多项式(在模 \(U^V\) 意义下)。而我们要求的是所有 \(g(x,x)\),因为只有当附加权值等于连通块大小时,我们算的才是对的。因此,可以先枚举 \(r\),再对 \(k\in[0,V-1]\) 求出所有的 \(g\),然后插值得到 \(n\) 个多项式。这下,对于每个满足 \(x=kU+r\)\(x\),我们就都能求出答案了。要求的 \(g(x,i)\)\(i\) 共有 \(O(UV)\) 个,要插值的多项式共有 \(O(n)\) 个(我们只需要有需要的多项式,如果 \(g(x,i)\)\(x\) 不等于 \(kU+r\),我们可以不插值。)

由于不一定有逆元,可以使用如下插值:

\[f(k)=\sum\limits_{i=1}^n C_{k-1}^{i-1} \sum\limits_{j=1}^i (-1)^{i+j} C_{i-1}^{j-1}f(j) \]

我不会证明,geven 说当结论记。

\(g\) 的总复杂度是 \(O(n^2UV)\) 的,插值的复杂度是 \(O(nV^2)\) 的,然后就能过了。

H - 「KDOI-12」能做到的也只不过是静等缘分耗尽的那一天。

怎么做,\(\sum\limits_{i=1}^n i C_{i}^x\)???(我们假设 \(1\leq x \leq n\)。)

发现,\(\sum\limits_{i=1}^n C_i^x = C_{n+1}^{x+1} = \frac{(n+1)!}{(x+1)!(n-x)!}\)

又发现,\(\sum\limits_{i=1}^n C_i^x = \sum\limits_{i=1}^n \frac{i!}{x!(i-x)!}\),而我们要求的是 \(\sum\limits_{i=1}^n \frac{i!\times i}{x!(i-x)!}\)。尝试凑一凑系数,先搞一个 \(\sum\limits_{i=1}^n \frac{(i+1)!}{x!(i-x)!}\),再用它减去 \(\sum\limits_{i=1}^n\frac{i!}{x!(i-x)!}\) 就行了。容易发现 \(\sum\limits_{i=1}^n \frac{(i+1)!}{x!(i-x)!} = (x+1)\sum\limits_{i=1}^n \frac{(i+1)!}{(x+1)!(i-x)!}=(x+1)\sum\limits_{i=1}^n C_{i+1}^{x+1}=(x+1)C_{n+2}^{x+2}\)

所以 \(\sum\limits_{i=1}^n iC_{i}^x=(x+1)C_{n+2}^{x+2}-C_{n+1}^{x+1}\)。(咨询了 Deepseek。)

然而,这个东西和正解没什么关系。但是和 wxir 的正解有点关系。不过 wxir 和正解没有什么关系。所以这个东西和正解没有什么关系。下面说的东西才是正解,它和 wxir 没有什么关系。

技巧:现在若要计数排列 \(p\),还需要满足 \(p_x\)\([l,r]\) 里的最大值,可以考虑转化成树上拓扑序。








IT'S!!DP!!TiME!!!

J - Not Another Constructive Problem

排列 \(q\) 有好树的充要条件是:它的置换环只有一个。

假设现在有一棵树 \(T\),那么它是好树其实等价于:它的任意一棵子树在排列 \(q\) 的置换环上都是连续的区间。

怎么证明?

nodgd 和大 H 证明了。我就不证明了。其实这个还比较好证。

仔细观察,仔细思考,发现这个条件等价于,\(T\) 的边在环内画出来后,除了端点处两两不交。即没有交叉的边。这个也比较好证,但是很难观察。假设我有一条 \((u,v)\) 的边,它要求删了它后 \(S\) 连续且 \(V\setminus S\) 连续。那我们就假设它们连续。发现突然出现了一条边 \((x,y)\)\((u,v)\) 交叉,在刚刚的假设下,这条边就一定会让整张图连通。但是总共就只有 \(n-1\) 条边,还删了一条,那图是肯定连通不了的。于是就矛盾了。必要性得证。

充分性也好证,但是我不想写了。

于是这个问题是个非常经典的问题,直接区间 DP 就做完了。时间复杂度 \(O(n^3)\)

UPD:我怒了。原题的排列 \(p\) 居然不满足 \(p_i=i\),不过这不重要,随便倒腾一下就是对的了。

UUPPDD:发现这个问题我居然不会做,怎么被降智成这样了。

CF888F。

其实很显然。

UUUPPPDDD:我脑子有问题吧。

\(p\)\(q\) 倒腾一下,没问题。树的连边不用倒腾。这很显然。

然而我倒腾了。

C - 树数叔术

fwlm。

I - Circus P

抽象程度堪比岁月。而且很困难。

首先考虑一下答案怎么刻画。

假设奶牛们没有标号,那么任意指定树上 \(k\) 个点,奶牛们都一定可以到达这个状态。现在只需要考虑标号,于是猜想答案与 \(k!\) 有关。

假设奶牛 \(x\) 和奶牛 \(y\) 可以到达一个只有它们交换了位置,其它奶牛位置和原来一样的状态,那么就称 \((x,y)\) 可交换。在所有可交换对之间连边,整个图一定形成若干个团(因为可交换关系具有传递性)。于是答案就为 \(\frac{k!}{\prod siz_i!}\),其中 \(siz_i\) 是第 \(i\) 个团的大小。这是相当显然的,因为一个团里的元素可以任意排列,这不改变其本质,因此它是一个多重集排列问题。

问题变成了,现在已经确定 \(k\),如何求出所有 \(siz_i\)

我们定义一条链为一条树上的路径,满足其除了端点以外的所有点度数均为 \(2\)。假设这条链的端点分别是 \(u\)\(v\),那么我们称它为链 \((u,v)\)。发现,一棵树一定能被唯一划分成若干条链,且每条边恰被一条链覆盖。假设一条链两端子树大小分别为 \(A,B\),且链长(指点数)为 \(C\),那么有 \(A+B+C=n+2\)。发现链具有良好的性质,足以我们刻画一些条件。结论如下:

\((x,y)\) 可交换,当且仅当对于所有满足 \(k\geq (A-1)+(B-1)\) 的链 \((u,v)\)\(x,y\) 同时属于 \(u\) 的子树(不包括 \(u\))或 \(x,y\) 同时属于 \(v\) 的子树(不包括 \(v\))。

这条件是充要的。我不证了。因为这是一个总结,不是题解。

又因为 \((A-1)+(B-1)=n-C\),所以上述条件可以转化为 \(k\geq n-C\),即 \(C\geq n-k\)。我们称满足该条件的链为不合法链,那么这些链会把原图划分成若干个连通块,其中,只有同一连通块内的奶牛才能互相交换。于是,只需要统计每个连通块中有多少个奶牛就行了。这非常抽象,因为发现并不好统计。

不过,做完了,时间复杂度 \(O(n\log n)\)。不想写了。群里问一下 jr。

C - 树数叔术

首先,肯定要求 \(0\sim V\) 中每个数出现过至少一次,不然选全集就炸了。所以必须满足 \(V+1\leq n\),不然方案数为 \(0\)。于是乎,假设 \(S\)\(\text{mex}\)\(v\),那么 \(v\) 必定在 \(S\) 外出现过,因为 \(S\) 里没出现过 \(v\)。也就是说 \(\min\) 是小于等于 \(\text{mex}\) 的,其中 \(\min\) 指的是 \(S\) 补集中的最小值。不合法就当且仅当存在一组 \(\min<\text{mex}\)

发现,一旦钦定了 \(\min\)\(c\),那么 \(0\sim c-1\) 的位置其实是很重要的!(因为 \(S\) 必须包含它们所有。)这启示我们找到 \(0\sim c-1\) 的导出连通块(能理解就好)。现在先找到所有 \(c\),如果存在一个 \(c\) 在连通块外,那么就只能有这一个 \(c\)

反证:假设外面挂着两个 \(c\),那么选一个 \(c\) 和原来的导出连通块,\(\min=c,\text{mex} \geq c+1\),不合法。假设外面有一个 \(c\),连通块里有一个 \(c\),那么选择原来的导出连通块,\(\min=c,\text{mex}\geq c+1\),不合法。得证。

然后能证明,上面那种情况一定合法。因为想让 \(\min=c\),所以原连通块必须选完,但是当前 \(c\) 不能选,于是 \(S\) 里必定没有 \(c\),所以 \(\min=c\)\(\text{mex}=c\),非常酷炫。

否则,所有 \(c\) 都在连通块内,则一定合法。因为根本选不出来一个 \(\min=c\) 的连通块。

这条件是充要的。

虽然上面说的是导出连通块,但状态可以用虚树。虚树也可以套用上面的证明,非常显然。

\(dp_{c,i,j}\) 表示考虑颜色 \(0\sim c\) 时,虚树上共有 \(i\) 个点且有 \(j\) 个点权值大于 \(c\) (但我们具体不清楚它的值是多少,所以也可以看作它是无颜色点,这是一个延迟决策)时的方案数。

假设现在需要加入一个点 \(c+1\),转移分如下几种(下面应该是 += 来着,但是我懒得改了):

\(dp_{c+1,i,j-1}=dp_{c,i,j} \times j\)。(选一个权值大于 \(c\) 的点,把它的权值变成 \(c+1\)。)

\(dp_{c+1,i+1,j}=dp_{c,i,j} \times (i-1)\)。(在一条边上插入。)

\(dp_{c+1,i+1,j}=dp_{c,i,j} \times i\)。(作为一个叶子加入。)

\(dp_{c+1,i+2,j+1} = dp_{c,i,j} \times (i-1)\)。(先在一条边上新增一个虚点,再作为这个虚点的邻居叶子节点加入。)

假设现在需要加入 \(a+b\) 个点 \(c+1\),其中 \(a\) 个点由原来的无颜色点改变颜色得到,\(b\) 个点插入在边上,那么有如下转移(\(a+b>1\)):

\(dp_{c+1,i+b,j-a}=dp_{c,i,j} C_j^a C_{b+i-2}^b\)

直接做是 \(O(N^5)\) 的,分步转移就可以 \(O(N^4)\) 了。

B - [省选联考 2022] 最大权独立集问题

这题和 Not Another Constructive Problem 很像。操作几乎一模一样,于是尝试直接套用结论:每棵子树在置换环上均管辖一个区间。然后呢?然后就不会做了。当然还是有一点会做的,假设得到合法排列 \(p\)\(p_i\) 表示 \(i\) 最后要去的位置,那么答案为 \(\sum\limits_{i=1}^n \text{dis}(i,p_i)d_i\)

继续观察,管辖的这个区间有什么意义。比如说,\(H_{l-1}\) 会指向 \(H_l\),这代表 \(H_{l-1}\) 最终会到达 \(H_l\) 的位置。比如说,\(H_r\) 会指向 \(H_{r+1}\),这代表 \(H_r\) 最终会到达 \(H_{r+1}\) 的位置。其它的都是在子树内交换罢了。也许我们只关心谁会被一个外来点到达,谁会被换出去?

\(f_{u,x,y}\) 表示,在 \(u\) 子树中,有一个外来点到达 \(x\),且 \(y\) 被交换出去时的答案。这里的答案只统计了区间之内的交换代价,然后 \(u\)\(father_u\) 算不算可能稍有争议。不过发现这条边只可能是,上面是 \(H_{l-1}\),下面是 \(H_r\) 时启动。\(H_{l-1}\) 我们是不知道的,但 \(H_r\) 就是 \(y\)。于是这里的答案还要再统计一个 \(d_y\)。发现这超级无敌酷炫,因为这个区间内的所有点的贡献都被正确计算了,除了 \(y\)\(y\) 可能还要再走,于是就只处理了我们目前能确定的贡献。\(1\) 那里算答案可能要特殊处理一下,不过这不重要。

看起来状态是 \(O(n^3)\) 的,不过容易发现 \(x,y\) 不可能在 \(u\) 的同一子树内。这非常显然。于是 \(u=\text{LCA}(x,y)\),状态就只用记 \(x,y\) 了。考虑转移(下面都设 \(u=\text{LCA}(x,y)\)):

  • \(u\) 为叶子。

    \(f_{u,u}=a_u\)

  • \(u\) 只有一个儿子。

    • \(x=y=u\)

      这不可能发生。把 \(u\) 换出去过后,\(u\) 上的点必须停在 \(u\)。但下面还有一条边,所以它不可能停在 \(u\)。如果先把下面一条边操作了,那么 \(u\) 就不可能换出去了。所以该状态不合法。

    • \(x=u\)

      讨论一下,发现过程必定形如这样:先把 \(y\) 换到 \(u\),再操作 \((x,father_x)\)
      于是 \(f_{x,y}=\min\limits_w f_{w,y}+d_x+d_y\),其中 \(\text{LCA}(w,y)=ls_u\)

    • \(y=u\)
      讨论一下,发现 \(f_{x,y}=\min\limits_w f_{x,w}+d_y\),其中 \(\text{LCA}(x,w)=ls_u\)

    这些转移总共都是 \(O(n^2)\) 的,因为这些都可以看做 \(u\) 子树内选了两个不一样的点。

  • \(u\) 有两个儿子。

    想一想发现,这种情况的讨论稍为复杂。在上一种情况中,我们是可以知道 \((u,father_u)\)\((u,ls_u)\) 的操作相对顺序的,但是这种情况就不同了,因为有三条边。不同的操作顺序可能都合法,于是对应着不同的转移。不过呢,它是一个二叉树,所以每个点度数 \(\leq 3\),于是也就只有 \(3!\) 种情况而已,直接讨论即可。

    • \(x=y=u\)

      同上,这不可能发生。

    • \(x=u,y\in \text{subtree}(rs_u)\)\(ls_u\) 对称)。

      \(f_{x,y}=\min\limits_{w_1,w_2,w_3} f_{w_1,w_2}+f_{w_3,y}+d_x+d_{w_2}+d_y\),其中 \(\text{LCA} (w_1,w_2)=ls_u,\text{LCA}(w_3,y)=rs_u\)

    • \(y=u,x\in \text{subtree}(rs_u)\)\(ls_u\) 对称)。

      \(f_{x,y}=\min\limits_{w_1,w_2,w_3} f_{w_1,w_2}+f_{x,w_3}+d_y+d_{w_3}\),其中 \(\text{LCA}(w_1,w_2)=ls_u,\text{LCA}(w_3,y)=rs_u\)

    • \(x\in \text{subtree}(ls_u),y\in \text{subtree}(rs_u)\)。(也有对称情况。)

      \(f_{x,y}=\min\limits_{w_1,w_2} d_u+d_y+f_{x,w_1}+f_{w_2,y}\),其中 \(\text{LCA}(x,w_1)=ls_u,\text{LCA}(w_2,y)=rs_u\)

这实在是太酷炫了,转移不知道是 \(n\) 的多少次方,反正非常离谱。虽然有树形背包证明加持,不过我还是不知道这复杂度是多少,等我算一算。

还有一点就是,这里面每种情况都只有一种合法转移。所以写出来比较好看。

浅浅估计一下,至少也有 \(O(n^4)\) 了。不过至少有了一个(大常)多项式复杂度做法。

部分分给的真不留情面啊。

好在优化比较简单。观察转移,发现转移独立性相当强!

设若干辅助数组。

\(g1_u\),表示 \(\min\limits_{w_1,w_2,\text{LCA}(w_1,w_2)=u}f_{w_1,w_2}+d_{w_2}\)
\(g2_u\),表示 \(\min\limits_{w_1,w_2,\text{LCA}(w_1,w_2)=u}f_{w_1,w_2}\).
\(h1_{u,y}\),表示 \(\min\limits_{w_1,\text{LCA}(w_1,y)=u} f_{w_1,y}\)
\(h2_{u,x}\),表示 \(\min\limits_{w_1,\text{LCA}(w_1,x)=u} f_{x,w_1}+d_{w_1}\)
\(h3_{u,x}\),表示 \(\min\limits_{w_1,\text{LCA}(w_1,x)=u} f_{x,w_1}\)

于是转移可以分别写成:

  • \(f_{x,y}=g1_{ls_u}+d_x+d_y+h1_{rs_u,y}\)
  • \(f_{x,y}=g2_{ls_u}+d_y+h2_{rs_u,x}\)
  • \(f_{x,y}=d_u+d_y+h3_{ls_u,x}+f_{rs_u,y}\)

于是就可以做到 \(O(n^2)\) 了。

jr 说这个常数非常大。我的我要爆了。发现其实一边 dfs 一边做可以不用开那么多二维数组,好耶。

哈哈哈哈。

posted @ 2025-12-13 15:26  Just_int_mian  阅读(123)  评论(0)    收藏  举报