loj #6673. EntropyIncreaser 与山林 题解
题目描述#
一句话题意:给定简单图 ,你需要计算出有多少个边的子集 ,使得由这些边构成的 的生成子图是欧拉图。
题解#
首先我们对点集而不是边集计数,统计 表示点集 的导出子图中,能有多少种选边集的方式使得其为欧拉图。
考虑一个图是欧拉图的充要条件,发现当且仅当图联通且每个点的 均为偶数。
考虑第一个条件可以用 处理。
现在我们需要 ,统计 表示点集 的导出子图中,能有多少种选边集的方式使得所有点 均为偶数。
考虑经典生成树:对于点集导出子图的每个联通块,我们注意到生成树是很关键的。
于是任意钦定一颗生成树,此时其他边我们爱咋选咋选,此时一定恰好存在一种生成树上的选择方案使得所有点 均为偶数。
具体证明就考虑从叶子到根做一遍 dfs
,若是奇数则选父亲边即可。
于是每个 联通块有 种方案。
于是 ,三个量分别表示边数,点数,联通块数。
然后对于集合幂级数 。
我们有 ,其中乘法表示子集卷积。
于是 ,做一下集合幂级数 即可。具体参考 cmd 博客最后一章。
复杂度 ,常数劣的可以学学我代码的写法,感觉很小清新。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】