【UOJ#37】 [清华集训2014] 主旋律

该博客讨论了如何在给定的强联通图中计算有多少种边的存在情况仍保持图强联通。通过反向思考,从不强联通的图出发,转化为计算有奇数或偶数个入度为0节点的子图方案数。文章介绍了利用DAG计数思想,通过定义状态`f[s]`、`g[s]`和`h[s]`进行动态规划转移,并详细解释了转移方程和计算过程。
摘要由CSDN通过智能技术生成

题目链接

题目描述

给定一张强联通图,求有多少种边的存在情况满足图依然强联通。
n ≤ 15 n\leq15 n15

Sol

首先正难则反,考虑用总数减去不强联通的。

考虑一张不强联通的图,缩点后一定是一个 DAG,好像可以对 DAG 进行计数。
诈一看这个做不了,因为缩点后计数是不可能在dp过程中实现的。

但我们按照 DAG 计数的思路的话其实并不需要真的知道 DAG 缩点后的形态。

我们类似 DAG 计数的话那么枚举这些缩完点后的点至少有多少个入度为 0 的点,然后容斥计算。

过程中我们用到的只是有 奇数/偶数个 入度为0的点的方案数以及他们和外部连边的总方案数。

所以我们只需要设 g [ s ] / h [ s ] g[s]/h[s] g[s]/h[s] 分别表示 集合 s s s的导出子图 内有 奇数/偶数 个入度为0的强联通分量的方案数。设 f [ s ] f[s] f[s] 表示 s s s 集合导出子图强联通的方案数, c n t ( S , T ) cnt(S,T) cnt(S,T) 表示 S S S T T T 内的边数。

f f f的转移和 DAG 计数类似。g,h的转移都很简单:

f [ S ] = 2 c n t ( S , S ) − ∑ T ⊆ S , T ≠ ∅ ( g [ T ] − h [ T ] ) ∗ 2 c n t ( S − T , S − T ) + c n t ( T , S − T ) f[S]=2^{cnt(S,S)}-\sum_{T\subseteq S , T \neq \emptyset}(g[T]-h[T])*2^{cnt(S-T,S-T)+cnt(T,S-T)} f[S]=2cnt(S,S)TS,T̸=(

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值