[ARC125F] Tree Degree Subset Sum

题意、转化

记节点 \(i\) 的度数为 \(deg_i\)。那么题目就等价于,给定 \(n\) 个数 \(deg_1,deg_2,\dots,deg_n\),求合法的数对 \((x,y)\) 个数。

  • 合法的定义:存在一个选出的数字组合,使得 \(x\) 为选出的个数,\(y\) 为选择的数字总和。

但是题目为什么要以“度数”的形式给出,而不是直接给权值呢?这里就涉及到一个隐藏性质—— \(\sum deg_i = 2(n-1)\)

同时,记 \(d_i=deg_i-1\),容易发现我们直接用 \(d\) 数组代替 \(deg\) 数组求合法 \((x,y)\) 个数,必定不会对答案产生影响,反而后面可能会更方便。

  • 注意:现在 \(\sum d_i=n-2\),后面将一直使用 \(d_i\) 来求值,不要混淆 \(\sum d_i\)\(\sum deg_i\)

维护答案

现在再来看怎么维护答案。

我们把每个数都看做一个物品,第 \(i\) 个物品的体积为 \(d_i\)

暴力背包做是平方的,直接优化比较难,并且也不容易去通过容斥什么的简化。

故而考虑发现一点性质。

性质

考虑一种计算顺序:枚举 \(y\),求合法 \(x\) 的个数并累加求和。如何快速求出合法的 \(x\) 呢?

打个表/根据感觉 可以得知——对于一个固定的 \(y\) 来说,合法的 \(x\) 必定形成一个区间,记为 \([L_y,R_y]\)

同时,根据贪心法,\(x=L_y\) 的方案必定选择了 \(0\)\(d_i=0\) 的点,\(x=R_y\) 的方案必定选择了所有 \(d_i=0\) 的点。我们记 \(cnt=\sum [d_i=0]\)

我们想要证明这个性质,需要寻找一个性质成立的充分条件,并且证明这个充分条件成立。

定义一个条件 \(A\):如果 \(\forall i\in[L_y,R_y]\),都能在 \(x=L_y\) 的方案加上若干个 \(d_i=0\) 的点,或者在 \(x=R_y\) 的方案去掉若干个 \(d_i=0\) 的点,得到一个 \(x=i\) 的方案的话,那么我们的条件成立。

容易发现,\(A\) 就是“合法的 \(x\) 形成区间”这一性质的充分条件。

考虑把上述的想法用代数表示,即 \([L_y,L_y+cnt]\cup[R_y-cnt,R_y]=[L_y,R_y]\)

写成条件,即 \(L_y+cnt \geq (R_y-cnt)-1\),移项可得 \(R_y-L_y\leq 2cnt+1\)

同时容易发现,若此时 \((x,y)\) 合法,必定有 \(y-x\geq -cnt\);反过来,对于没选的数字组成的合法数对 \((n-x,(n-2)-y)\),满足 \((n-2-y)-(n-x)\geq -cnt\)。整合前后两个式子可得:\(y-cnt+2\leq x\leq y+cnt\)

经过上述过程,我们得到 \(R_y-L_y\leq (y+cnt)-(y-cnt+2)=2cnt-2\)。自此,充分条件 \(A\) 的成立性得证。

  • 注意 \(y-cnt+2\leq x\leq y+cnt\) 这个式子是合法 \(x\) 的必要条件而不一定是充分,所以不可以简单地认为直接拿这个式子来求合法的 \(x\) 个数。

有了性质后的做法

现在我们只需对所有 \(y\) 求出所有的 \(L_y,R_y\),因为根据性质,答案就等于:

\[\sum_{i=1}^n (R_y-L_y+1) \]

对于这样一个求最值的背包问题,显然比计数具有可优化性。

由于本题具有物品体积和很小的良好性质——\(\sum d_i=n-2\)。故而这 \(n\) 个物品种,至多只有 \(2\sqrt n\) 种不同的 \(d_i\)

证明:所有满足 \(d_i>\sqrt n\)\(i\),最多只有 \(\sqrt n\) 个;所有 \(d_i\leq \sqrt n\) 的数,也只有至多 \(\sqrt n\) 种。

至此,现在我们的问题是一个——有至多 \(2\sqrt n\) 种物品的多重背包,可以使用二进制分组优化,或者单调队列优化。

二者时间复杂度都是 \(O(n\sqrt n)\),具体证明可以见我的 CF95E题解,这是本题去掉发现性质那一步的板题。

posted @ 2025-02-18 17:03  徐子洋  阅读(14)  评论(0)    收藏  举报