【luogu P4708】画画(dfs)(Burnside引理)(分类讨论)(欧拉回路)
画画
题目链接:luogu P4708
题目大意
问你 n 个点的无标号的每个连通块有欧拉回路的图的个数。
思路
你看到无编号,也就代表着可以通过置换把一些有编号的看做同一个。
那两个点之间的边有存在和不存在两种,所以我们考虑用 Burnside 引理:
其中 为 这个置换中不动点的个数,这道题中 。
然后你发现这个置换是点的,然而你要统计的 是有关边的。
那你会想到一道叫做有色图的题目。
然后我们假设你已经会了做有色图,然后我们考虑用做那道题的思路来搞这道题。
那你还是考虑 dfs 出点置换的循环,设为 ,然后长度分别为 。
然后记得每个乘上 ,然后 和外面的 抵消()。
然后你还是分类讨论:
我们搞之前首先要确定一个东西,就是对于一个循环中的边,它们肯定是要么都有这条边,要么都没有。
而且我们再看欧拉回路的性质,就是每个点的度数都是偶数,那我们就要保证你选出来的方案点度数都是偶数。
如果是在同一个循环,那你就像之前一样分奇偶讨论:
- 如果是奇数:
那就是 个循环,然后你会发现这些循环的边要了之后每个点的奇偶度数都不会改变。因为它们都是转一圈,然后两边都会加。
- 如果是偶数:
那就是 个循环,然后前面的 跟原来一样都是转一圈,所以也是不变。但是右边的 (就是两个点的记录是 )这个循环跑了一半就每个,那就是每个点都多了 ,度数的奇偶性全改了。
然后如果不是在同一个循环,然后我们来看:
在有色图中我们是 个循环,那我们看看每个循环的样子:
其实你会发现,就对于循环 中,每个点都连出了 条边,然后对于循环 ,就是每个点 条边。
那我们把这两个东西分别设为 。
然后我们把这两个东西分奇偶讨论。
- 都是偶数,那你加了之后两个循环的的奇偶每个点都不改。
- 都是偶数,那你加了之后两个循环的的奇偶每个点都改。
- 一个奇数一个偶数,那哪个是奇数,它那边的循环就改了,另一边就没有改。
然后你考虑这些改不改会怎么样。
首先是不改,那它不改那你选也可以不选也行,那就是有多少个方案数就乘上 的它次方。
那接着就是改了的,我们考虑把它一个改奇偶看做是点的一个属性,然后两个点改看做是边的属性。
然后问题就转化成了这个:
你有一些点和一些边,然后每个点有若干次()机会翻转它的属性,每个边有若干次()机会翻转它连接的两个点的属性,然后问你有多少种方案使得所有点的属性不变。
不难看出每个连通块的答案是独立的,可以分别求之后乘起来。
然后就是考虑怎么求每个连通块的答案:(假设现在的连通块是 大小)
这个弄这个东西方法(个人觉得)非常神奇:
你就随便找一个这个连通块的 dfs 树,然后你在你确定了所有非树边和点的方案,那树边的方案就是唯一确定的(或者没有),然后有的情况当且仅当单点的操作次数和为偶数。
然后证明:(这个的修改值被翻转的次数是奇数)
因为你单点操作保证了只看单点操作的时候有偶数个被修改的点。
然后你非树边操作是不会改被修改点个数的奇偶性。()
然后你就可以从 dfs 树的叶子节点开始进行一个树形 DP,每次如果下面的点是被修改的,那你就把用那条树边操作翻转它和它父亲。
然后要么不用操作,要么最后一步就是 ,不会出现 DP 到最后只有 是被修改的情况,所以是可以的。
而且显然它这个东西是唯一而且是可以一一对应的。
那我们考虑怎么描写这个统计,那首先是点的选法。
你可以看做是 中选的方法,那选中个数是奇数的肯定是其中一半。
当然有个例外就是 的时候方案是是 ,所以要跟 取 。
然后是边的选法,假设你已经确定好一个 dfs 树,那根据我们前面的,非树边随便搞都有一一对应的。
就直接是所有的边减去树上的 条边。
所以就是 。
所以答案就是:
代码
__EOF__

本文链接:https://www.cnblogs.com/Sakura-TJH/p/luogu_P4708.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现