专栏文章

题解:P6846 [CEOI 2019] Amusement Park

P6846题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipssgqs
此快照首次捕获于
2025/12/03 17:21
3 个月前
此快照最后确认于
2025/12/03 17:21
3 个月前
查看原文
考虑一个 DAG 在边全部反转之后仍然会是 DAG,那么如果有一种反转 xx 条边的方案,就一定有一种与之对应的反转另外 mxm - x 条边的方案。所以我们只需要求出总方案数,然后乘上 m2\dfrac{m}{2} 即可。
那么怎么求总方案数呢?
考虑状压 DP,设 f(S)f(S) 表示 SS 点集的导出子图反转之后变成 DAG 的方案数。
我们知道 DAG 里一定有一些入度为 00 的点,删除这些入度为 00 的点后,我们会得到一个小的 DAG。考虑枚举这些入度为 00 的点,然后可以从小 DAG 转移。
枚举 SS 的子集 TT,将 SS 拆成 TTSTS - T,当 TT 是一个独立集的时候,f(S)f(S) 可以从 f(ST)f(S - T) 转移而来。
但问题是这样做会算重复。比如我们枚举的一个合法的 TT00110011,那么 0010001000010001 一定也是合法的,这样同一种方案就被记重了。
考虑一个老生常谈的容斥,当 TT 中点的个数是奇数个时,令它有 11 的贡献,当点的个数是偶数个时,令它有 1-1 的贡献。
于是做完了,最终复杂度 O(3n+n22n)O(3^n + n^22^n)

评论

0 条评论,欢迎与作者交流。

正在加载评论...