uoj #37. 【清华集训2014】主旋律
考虑原先求的是 SCC 为 1 的方案数,这很困难!因为并没有能够转移到子问题的路径。
不妨考虑容斥,即 SCC 为 1 的方案数=所有方案数-SCC 不为 1 的方案数。
不妨先集合划分出 SCC,然后就变成了,内部的 SCC 子问题(此时因为钦定的 SCC 个数 >1,因此规模一定变小)以及外层的 DAG 计数。
不妨先考虑内层的 DAG 计数。
此时与原问题、原图没有一点关系!我们仅仅考虑一般有向图的删边后成为 DAG 这个子问题!!!
即当前图有若干个入度为 0 的点。考虑我们拓扑的过程,把这入度为 0 的点都搞一次之后删去其出边,之后一定又出现若干入度为 0 的点,否则因为其是个 DAG,则拓扑结束。也就是说,当我们钦定入度为 0 的点之后,我们将 DAG 计数转为了子规模的 DAG 计数。
即设 为点集 的点导出子图的删边后成为 DAG 的方案数, 为 中恰好入度为 0 的点集为 的 DAG 方案数。但恰好很难求,考虑钦定。即 为钦定 中入度为 0 的点集为 的 DAG 方案数。
则有
子集反演
注意到,此时的 DAG 计数仅仅与你钦定的入度为 的点集有关!
考虑回到原问题,即考虑钦定点集 作为入度为 的 SCC 的点集,但其内部的 SCC 还要集合划分!但我们只关心什么?因为是钦定!!!对于容斥系数而言,我们只关心其划分的 SCC 的个数的奇偶以及其方案数。
考虑记 为 的点集划分出奇数个 SCC 的方案数, 为偶数个。
记 为删边使得其为 DAG 的方案数。
那么我们有 。
考虑钦定点集 作为入度为 的 SCC 点集,注意是钦定。那么就变成了 自己内部的子问题。又因为我们要求当前 SCC 个数 >1,所以并不会回到当前规模的问题!!!
那么要如何求 ,为 划分出 >1 个 SCC 的方案数/yiw
考虑缩点后的图,既然只关心 ,那么钦定完之后,其他咋办!考虑 在原问题的定义是钦定 中的点缩完点后在入度为 0 的 SCC 内!所以可以存在不属于 的点存在于入度为 的 SCC 内。因此钦定完,就直接瞎连了。
那么我们有 ,不难发现,我们实际上就是在考虑其缩点后的情况。也就是说,本质就是在用 去贡献啦。只是对应的图一张是原图,一张是缩点后的图。并且,这个时候,我们当前数到的 SCC 数量一定 >1,这是因为,可能 =1 的情况当且仅当 ,而我们钦定的 此时均没有包含只有一个 SCC 的情况!我们并不会回到当前规模的问题,所以没事。
然后 的转移是平凡的,考虑钦定其中某一个点所在的 SCC 的点集即可转移。
__EOF__

本文链接:https://www.cnblogs.com/xugangfan/p/17238807.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】