ATB306H Balance Scale 学习笔记

ATB306H Balance Scale 学习笔记

Luogu Link

题意简述

给定一个 \(n\)\(m\) 边的简单无向图 \(G\)。可以把一些边改为有向边,之后彼此由无向边连通的点集会缩成一个点。问有多少种操作方案可以使缩点后的图是 \(\texttt{DAG}\)?。

\(n\le 17\)。无重边,无自环。

做法解析

前置知识:\(\texttt{LGP6846}\)

你如果做过上述那道题就会发现,如果所有边都要求定向的话这题和那题就本质相同了。那本题怎么“归约”上去呢?

我们写一下 \(\texttt{LGP6846}\) 的转移式子:\(F_S=\sum_{T\subset S,T\neq\varnothing}(-1)^{|T|-1}F_{S-T}\),其中 \(T\) 必须是独立集。我们发现,到了本题里面,即使 \(T\) 不是个独立集,我们也可以做转移——我们转移时的约束实际上是所有有向边关系都来源于 \(T\to S-T\)\(\texttt{LGP6846}\) 那道题只允许有有向边,所以 \(T\) 内部不能有别的边;而这道题里面,那 \(T\to T\) 的边不就正等价于那些不做处理而最后会缩掉的无向边么?

容斥系数也得跟着改一下,从 \((-1)^{|T|-1}\) 变成 \((-1)^{G_T-1}\),其中 \(G_T\) 表示只考虑 \(T\) 且不给 \(T\) 中任何边定向,缩点后的点数。\(G\) 数组怎么求呢?对于每个点集 \(S\),我们都遍历图上的 \(m\) 条边,尝试用并查集合并相连通的点,最后连通块个数就是 \(G_S\) 的值了。很暴力,但是可以过。

代码实现

未使用子集卷积。


posted @ 2025-03-10 17:31  矞龙OrinLoong  阅读(5)  评论(0)    收藏  举报