YC313A [ 20240703 CQYC省选模拟赛 T1 ] 人生(life)

题意

给定一个 \(n\) 个点的有向图,保证每条边形如 \(i \to j, i < j\),已经有一些点被染色。

你需要求出有多少不同的染色和建边方案,使得每条黑白交错的路径数量为奇数。

\(n \le 10 ^ 5\)

\(Sol\)

先考虑如何暴力 \(\text{dp}\)

我们发现对于一个点 \(j\),影响她贡献的只有 \(\forall i, i < j\)

若连一条 \(i \to j\) 的边,对于所有以 \(i\) 结尾的路径都会扩展到 \(j\)

显然对于偶数条结尾的点没有意义,不难设出 \(f_{i, j, k, 0/1}\) 表示前 \(i\) 个点,有 \(j\) 黑点个数结尾的路径条数为奇数,有 \(k\) 个白点结尾的路径条数为奇数,所有前 \(i\) 个点的路径条数的奇偶性为 \(0/1\)

转移时直接枚举有多少个奇数白点连向 \(i + 1\),有多少奇数偶点连向 \(i + 1\) 即可。

复杂度是 \(O(n ^ 4)\) 的,有点小爆。

集中注意力,发现我们并不关心有多少点连向 \(i + 1\),转移变为从 \(j\) 个数里选出奇数个还是偶数个的方案数,显然这就是 \(2 ^ {j - 1}\)

观察转移式,我们钦定了这 \(j\) 个点是否连向 \(i\),对于剩下的点是直接乱连的,方案数乘上 \(2 ^ {i - j}\)

将二者合并,发现当且仅当 \(j = 0\) 时,当前点为偶数的情况,系数为 \(0\),对于考虑当前点为奇数的情况,系数为 \(2 ^ i\),否则都是 \(2 ^ {i - 1}\)

修改状态定义,设 \(f_{i, 0/1, 0/1, 0/1}\) 表示前 \(i\) 个点,是否有黑点以奇数结尾,是否有白点以奇数结尾,前 \(i\) 个点的路径条数的奇偶性为 \(0/1\)

posted @ 2024-07-12 10:41  cxqghzj  阅读(4)  评论(0编辑  收藏  举报