容斥原理
[CF1707D] Partial Virtual Trees
真子集限制很不爽,考虑去掉它。
令 \(f_i\) 表示题目所求答案,\(g_i\) 表示相邻两个集合可以相同的方案。
枚举 \(g_i\) 中有哪几次相邻集合不同,有 \(g_i=\sum_{j=1}^i\binom{j}{i}f_j\)。
由二项式反演可得 \(f_i=\sum_{j=1}^i(-1)^{j-i}\binom{j}{i}g_j\),接下来只用求 \(g_j\) 即可。
一个点能不选当且仅当它有至多一个子树当前含有点,用 \(dp_{u,i}\) 表示 \(u\) 子树内 \(i\) 时刻含有点的方案数。
枚举 \(1\) 的儿子什么时候全被删去,有 \(g_i=\prod_{v\in son(1)} \sum_{k=0}^{j-1} dp_{v,k}\)。
令 \(s_{i,j}=\sum_{k=0}^jdp_{i,k}\),有 \(g_i=\prod_{v\in son(u)}s_{v,j-1}\),可以 \(O(n^2)\) 解决,接下来考虑转移。
讨论 \(u\) 在 \(i\) 时刻是否还在集合。
如在集合内只需要所有子树均合法即可 \(dp_{u,i}\leftarrow \prod_{v\in son(u)}s_{v,i}\)。
否则 \(u\) 至多只有一个子树此时含有点,枚举时刻 \(t\) 表示在 \(t\rightarrow t+1\) 时由选变为不选。
有 \(dp_{u,i}\leftarrow \sum_{p=0}^{i-1}\sum_{v\in son(u)}dp_{v,i}\prod_{w\in son(u)\land v\neq w}s_{w,p}\)。
对于 \(\prod_{w\in son(u)\land v\neq w}s_{w,p}\) 的计算,做一个前后缀求积即可,总时间复杂度 \(O(n^2)\)。
[LOJ575] 不等关系
令 \(cnt_i\) 表示 \(i\) 及之前 \(>\) 的数量,将系数 \(n!\) 提出来,另 \(f_i\) 表示到前 \(i\) 项的合法方案数。
考虑转移,我们可以任选前面的任意一个 \(>\),并把它后面的所有 \(>\) 都钦定为 \(<\)。
所以有 \(f_i=\sum_{j=0}^{i-1}[s_i\neq <](-1)^{cnt_{i-1}-cnt_j}\frac{f_{j}}{i-j}\),将 \((-1)^{cnt_{i-1}}\) 提到前面后做分治 NTT。
[ICPC 2025 Yokohama R] Charity Raffle
参考题解:https://www.luogu.com.cn/article/02s56q3w
[QOJ15326] Yet another 01 problem
考虑一棵树,如果所有有两个叶子儿子的节点的两个儿子的权值都不相同,那方案数就是 \(2^{sum1}\)。
其中 \(sum1\) 为具有两个非叶子儿子的节点数量,同时记具有两个叶子儿子的节点数量为 \(sum2\)。
有 \(sum1=n-1-sum2-(n-2sum2)=sum2-1\)。
考虑怎么把 \(2^{sum2}\) 的贡献拆掉,有 \(2^{sum2}\) 等于 \(sum2\) 个数任意钦定的方案数。
令任意钦定中钦定到两个相邻叶子节点合并,它们权值不同时的系数为 \(1\),否则为 \(-1\)。
发现当全为 \(1\) 时,任意钦定时每个钦定子集加和就刚好为 \(2^{sum2}\)。
当有 \(-1\) 时,因为其它子集任意钦定然后含不含有它自己刚好为相反数,任意钦定加和就是 \(0\)。
所以可以通过任意钦定获得 \(2^{sum2}\) 的贡献。
会拆 \(2^{sum2}\) 的贡献后考虑计算钦定 \(i\) 个相邻两个叶子合并的总答案,记为 \(g_i\)。
令 \(dp_{i,s,0/1,0/1}\) 表示分治区间 \(i\) 一共钦定了 \(s\) 个相邻叶子合并的答案。
令 \(C_i\) 表示卡特兰数第 \(i\) 项(\(C_0=C_1=1,C_2=2\))。
钦定完后任意合并的方案数为卡特兰数,所以有 \(g_s=dp_{rt,j,k,s}*C_{n-s-1}(j,k\in\{0,1\})\)。
令 \(l_i\) 和 \(r_i\) 分别表示分治区间 \(i\) 的左右儿子,有:
\(dp_{i,j,k,s}\leftarrow dp_{l_i,j,p,t}*dp_{r_i,q,k,s-t}(j,k,p,q\in\{0,1\},t\in[0,s])\)。
如果 \(l_i\) 的右端点与 \(r_i\) 的左端点权值不同,额外有:
\(dp_{i,j,k,s+1}\leftarrow \sum dp_{l_i,j,0,t}*dp_{r_i,0,k,s-t}(j,k\in\{0,1\},t\in[0,s])\)。
如果 \(l_i\) 的右端点与 \(r_i\) 的左端点权值相同,额外有:
\(dp_{i,j,k,s+1}\leftarrow(-1)\sum dp_{l_i,j,0,t}*dp_{r_i,0,k,s-t}(j,k\in\{0,1\},t\in[0,s])\)。
转移的时候是一个卷积的形式,用 FFT/NTT 优化即可,\(ans=\sum g_i\),时间复杂度 \(O(n\log^2 n)\)。

浙公网安备 33010602011771号