洛谷 P4708 画画(无标号欧拉子图计数)
首先还是类似于无标号无向图计数那样,考虑点的置换带动边的置换,一定构成单射,根据 Burnside 引理:
\]
于是我们只需要考虑每个(点)置换下边置换的不动点(要求使得每个点度数为偶数)即可,有如下观察:
- 对于两个点循环置换 \(C_1, C_2\) 边在 \(C_1\) 导出子图中的边依然置换到导出子图内,对于其他循环置换同理;对于 \(C_1, C_2\) 之间的边,置换后任然在 \(C_1, C_2\) 之间。
于是本质上所有边循环置换就分为点循环置换内部和点循环置换之间,下面分情况考虑。
对于点循环置换 \(C\) 内部的情况,我们发现当且仅当 \(2 \mid |C|\) 时存在一个边循环置换恰好让所有点度数 \(+1\),剩下 \(\frac{|C|}{2} - 1\) 个边循环置换会让 \(|C|\) 所有点度数恰好 \(+2\),这部分可以任选。
而对于剩下恰好那一个将所有 \(C\) 内点奇偶性改变的边循环置换我们先放着最后考虑。
而对于奇数大小的点循环置换,发现其所有边循环置换都将所有点度数恰好 \(+2\),因此这些边可以任意选。
所以这部分对一个点循环置换提供了:\(\sum\limits_{i = 1} ^ k \lfloor \frac{a_i - 1}{2} \rfloor\) 个可以任选的边循环置换,注意 对于所有大小为偶数的点循环置换,还保留了一个能改变其整环奇偶性的边循环置换。
接下来考虑两个循环置换 \(C_1, C_2\) 之间的边循环置换,发现 \(C_1, C_2\) 之间有 \(\frac{|C_1||C_2|}{\mathrm{lcm}(|C_1|, |C_2|)} = (|C_1|, |C_2|)\) 个边循环置换,没个边循环置换让 \(C_1\) 上所有点度数加上 \(\frac{|C_2|}{(|C_1|, |C_2|)}\),让 \(C_2\) 上所有点度数加上 \(\frac{|C_1|}{(|C_1|, |C_2|)}\).
若 \(|C_1|, |C_2|\) 一奇一偶,不妨设 \(2 \nmid |C_1|, 2 \mid |C_2|\) 则选择一个两者之间的边循环置换,\(C_1\) 上的点全部加上偶数度数,\(C_2\) 上的点全部加上奇数度数,换而言之 选择一奇一偶之间的边循环置换对奇数大小的点循环置换度数奇偶性没有影响。
注意到我们之前给每个偶数大小的点循环置换保留了一个能改变整体奇偶性的边循环置换,且发现所有边循环置换对奇偶性的影响都是整个点循环置换的,因此对于奇偶点循环置换或偶偶点循环置换之间的所有边循环置换可以任选或不选,最后的奇偶性由保留的内部边循环置换唯一确定且可以保证。
所以这部分对边循环置换的个数贡献就是奇偶,偶偶点循环置换之间大小的 \(\gcd\),并且原本保留的边循环置换也不需要考虑,下面只需要考虑奇奇点循环置换之间的边即可。
若 \(2 \nmid |C_1|, 2 \nmid |C_2|\) 则每选一个两者之间的边循环置换都会使得两者整体度数奇偶性改变。
那么问题可以转化为:给定一个大小为 \(n\) 的无向完全图(两点之间可能有多条边但至少有一条边),保留一些边使得其每个点度数为偶数。
这是一个经典问题,将所有点看作是二进制下的位,那么一条边就相当于这两位为 \(1\) 的数,问题就是有多少个异或和为 \(0\) 的子集。
考虑找出这所有数的线性基,在原本的组合意义上就是无向完全图的任何一颗生成树。
注意到无论怎么选点集,所有位上数字的异或和总是为 \(0\) 的,也就是说线性基外的元素不论怎么选,线性基内都恰好可以找出唯一的与之对应的子集使得整体异或和为 \(0\).
那么因此这部分的贡献为:\(\sum\limits_{i < j, 2 \nmid |C_i|, 2 \nmid |C_j|}(|C_i|, |C_j|) - (\sum\limits_{i = 1} ^ k [2 \nmid |C_i|] - [\exists 1 \le i \le k, 2 \nmid |C_i|])\),最终合起来贡献为:
\]
其中 \(a\) 为点循环置换的大小序列,注意到数据范围较小,可以直接枚举所有划分数。
运用无标号无向图搜索的方法和精细实现,复杂度可以做到接近划分数数量,下面这份代码可以在 \(2s\) 内跑出 \(90\).
洛谷 P4708 画画(无标号欧拉子图计数)的更多相关文章
- 洛谷 P4708 - 画画(Burnside 引理+组合数学)
洛谷题面传送门 神仙题 %%%%%%%%%%%%%%%%%%%% 题解搬运人来了 首先看到本质不同(无标号)的图计数咱们可以想到 Burnside 引理,具体来说,我们枚举一个排列 \(p\),并统计 ...
- 洛谷UVA12995 Farey Sequence(欧拉函数,线性筛)
洛谷题目传送门 分数其实就是一个幌子,实际上就是求互质数对的个数(除开一个特例\((1,1)\)).因为保证了\(a<b\),所以我们把要求的东西拆开看,不就是\(\sum_{i=2}^n\ph ...
- 洛谷P3601签到题(欧拉函数)
题目背景 这是一道签到题! 建议做题之前仔细阅读数据范围! 题目描述 我们定义一个函数:qiandao(x)为小于等于x的数中与x不互质的数的个数. 这题作为签到题,给出l和r,要求求. 输入输出格式 ...
- 洛谷$P1390$ 公约数的和 欧拉函数
正解:欧拉函数 解题报告: 传送门$QwQ$ 首先显然十分套路地变下形是趴 $\begin{align*}&=\sum_{i=1}^n\sum_{j=1}^n gcd(i,j)\\&= ...
- 洛谷 P4708 画画
题意 在所以置换下,本质不同的各个极大连通子图均含有欧拉闭迹的\(n\)阶图个数 做法 务必先做完这题再看此题解,因为会省略大部分分析了 仍是从边入手,隔外限制:各个点度数是偶数 某个因子内\((m= ...
- 【洛谷 UVA11417】 GCD(欧拉函数)
我们枚举所有gcd \(k\),求所有\(gcd=k\)的数对,记作\(f(k)\),那么\(ans=\sum_{i=1}^{n}(f(i)-1)*i\).为什么减1呢,观察题目,发现\(j=i+1\ ...
- 洛谷 - P3768 - 简单的数学题 - 欧拉函数 - 莫比乌斯反演
https://www.luogu.org/problemnew/show/P3768 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}ijgcd(i ...
- 洛谷P1170 兔八哥与猎人 欧拉函数的应用
https://www.luogu.org/problem/P1170 #include<bits/stdc++.h> using namespace std; ],b[],c[],d[] ...
- 洛谷 P1341 无序字母对(欧拉路)
P1341 无序字母对 题目提供者yeszy 标签 福建省历届夏令营 难度 提高+/省选- 最新讨论 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造 ...
随机推荐
- [Error]ValueError: Object arrays cannot be loaded when allow_pickle=False
问题描述使用numpy的函数 numpy.load() 加载数据时报错: ValueError: Object arrays cannot be loaded when allow_pickle=Fa ...
- Spring企业级程序设计 • 【第2章 Spring Bean管理进阶】
全部章节 >>>> 本章目录 2.1 bean标签和import标签 2.1.1 标签中的id属性和name属性 2.1.2 Bean的作用范围和生命周期 2.1.2 Be ...
- 【MySQL作业】MySQL函数——美和易思系统信息函数和加密函数应用习题
点击打开所使用到的数据库>>> 1.显示当前 MySQL 服务器的版本信息和登录信息. MySQL 系统信息函数 version() 用于返回当前 MySQL 的版本号," ...
- 【】JSON语法RFC4627
Network Working Group D. Crockford Request for Comments: 4627 JSON.org Category: Informational July ...
- docker启动emqx官方镜像,顺便启动exporter
注意,我是把把官方镜像放到了自己的仓库 1.emqx官方镜像启动 docker run -d --name emqx31 -p 1883:1883 -p 8083:8083 -p 8883:8883 ...
- SpringCloud创建Config读取本地配置
1.说明 Config Server获取配置支持的方式很多, 包括Git仓库(github/gitee等),任何与JDBC兼容的数据库, Subversion,Hashicorp Vault,Cred ...
- mybatis-plus中查询出的字段为空
数据查询出后其中几个字段为null 解决方法: 数据库的字段命名方式为使用下划线连接,对应的实体类应该是驼峰命名方式,而我使用的是和数据库同样的命名方式. 所以mybatis-plus映射不到,修改实 ...
- springboot 项目在idea 中不能起动,但是在eclipse中能起动
新建的springboot 项目,在idea中用main方法起动时出现如下 : 但是把项目导入到eclispe中却能正常运行,百思不其解,网上一通百度,有的说没有依赖springboot的web 启动 ...
- LC 只出现一次的数字
Given a non-empty array of integers nums, every element appears twice except for one. Find that sing ...
- PAT 乙级 1003. 我要通过!(20) (C语言描述)
"答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于PAT的"答案正确"大派送 -- 只要读入的字符串满足下列条件,系统就输出"答案正确&quo ...