典中典图计数问题

一、无向图定向

问题描述:给定一张 \(n\) 个点,\(m\) 条边的的无向图,求给每条边定向后是 DAG 的方案数,对 \(998244353\) 取模。

数据范围:\(1 \le n \le 20\)

\(f_S\) 表示 \(S\) 点集中的点在 DAG 上时的方案数,枚举出度为 \(0\) 的点集 \(T\)\(g(S)\) 表示 \(S\) 能否成为出度为 \(0\) 的点集,当且仅当 \(S\) 内没有边时为 \(1\),否则为 \(0\)

\[f_S = \sum_{T \subseteq S, T \neq \varnothing} f_{S \oplus T} \cdot (-1) ^ {|T| - 1} \cdot g(T) \]

直接做是 \(\mathcal{O}(3 ^ n)\),利用子集卷积可以做到 \(\mathcal{O}(2 ^ n \cdot n ^ 2)\)

Trick:转移方程看似是需要在线的,但是由于是按 \(S\) 从小到大转移,而子集卷积恰好可以按 \(\operatorname{popcount}(S)\) 从小到大卷,所以能够做到 \(\mathcal{O}(2 ^ n \cdot n ^ 2)\)

二、DAG 计数

问题描述:对 \(n\) 个点带标号的 DAG 进行计数,对 \(998244353\) 取模。

数据范围:\(1 \le n \le 5 \times 10 ^ 3\)

\(f_i\) 表示 \(i\) 个点带标号的 DAG 数量,转移就每次枚举出度为 \(0\) 的点集。

\[f_i = \sum_{j = 1} ^ i f_{i - j} \binom{i}{j} 2 ^ {j(i - j)} (-1) ^ {j - 1} \]

由于每次枚举出度为 \(0\) 的点集 \(T\) 时,将所有 \(T \subseteq S\) 计算了一遍,所以需要容斥,时间复杂度 \(\mathcal{O(n ^ 2)}\)

Trick:可以将 \(j(i - j)\) 拆成 \(\binom{i}{2} - \binom{j}{2} - \binom{i - j}{2}\),然后分治 NTT 或者多项式求逆。

posted @ 2023-07-12 20:44  Fido_Puppy  阅读(88)  评论(0编辑  收藏  举报
Title