记录一种DAG计数方法与一个配套技巧
记录一种DAG计数方法与一个配套技巧
定义
于是有一个容斥的想法,设 DAG 中一个入度为
于是有表达式
技巧:一个判断点集
注意:c++ 中 &
运算的优先级低于 ==
运算。
P6846 [CEOI 2019] Amusement Park
CF1193A Amusement Park 与这道题是双倍经验
用一种对称的观点看,我们发现若存在一种翻转
于是设
AT_abc306_h [ABC306Ex] Balance Scale
如果不考虑 =
,那么容易发现答案不合法当且仅当有同序的关系构成了一个环,于是这就是一个 DAG 计数,与上一道题是一模一样的。
容易发现添加了 =
后,相当于把几个点构成的子连通块合并在了一起,类比一下,发现可以把这样一个连通块当作一个“点”进行添加,即:
同理配容斥系数,设
更优的复杂度:发现这是一个子集卷积,用子集卷积可以做到
TG178X 的模拟赛题“单独行动”
题目:给一个
个点, 条边的无向图,每条边 分别有 的概率变为 和消失,求最后为 DAG 的概率。
首先按照方法设出 dp 并写出转移式:
其中
将式子变为:
这可以子集卷积,复杂度
P10221 [省选联考 2024] 重塑时光
不难发现
当
设
其中
设
设
最终答案为
于是可以在
容易发现上面的转移式是一个卷积。设
带
复杂度
P6295 有标号 DAG 计数
先咕
【清华集训2014】主旋律
这是求强连通的子图,我们知道强连通图缩点后就是一个点,而非强连通图缩点后就是DAG,于是可以通过 DAG 计数的方法计算出非强连通图的个数后,从而得到强连通图的个数。
设
其中
注意:
-
根据定义
的更新应该放在 处理完毕之后。 -
代码:提交记录 #739694
HDU 4997 Biconnected
题意:给一张图,问有多少种加边的方法,使得图是边双。
GYM 102331C Counting Cactus
题意:给一张图(无重边自环),求有多少个边的子集使得没有任何一条边在两个环中。 (生成边仙人掌计数)
一个参考文章:一类图论相关的状压 DP 题的常见解法 - Mackerel_Pike - 博客园,里面说这种方法不仅可以运用在DAG计数,还可以运用在连通图、强连通、双连通图的计数与最优化上。其中计数问题需要容斥,最优化问题则不需要。
作者:lupengheyyds
出处:https://www.cnblogs.com/lupengheyyds/p/18714243
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现