洛谷 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个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造 ...
随机推荐
- oralce索引的使用
1.索引的作用 数据库对象 用于提高数据库检索的效率,对于where,group,order by条件中经常出现的字段,创建索引可以加快效率 缺点:如果对于大量的数据插入时效率可能会变低 2.索引的使 ...
- CS5216|DP1.2转HDMI1.4音视频转换芯片|CS5216参数
Capstone CS5216是一款用于DP1.2转HDMI1.4音视频转换芯片.CS5216是HDMI 电平移位器/中继器专为2型双模Display Port(DP++)电缆适配器应用而设计.它设计 ...
- <数据结构>并查集与树
作用 查:给定一个元素,查询它在哪个集合内 并:合并两个元素所在的集合 实现思路 对应关系 元素-->结点 集合-->树 多个集合-->森林 用树的根节点作为不同树的标志 合并时只需 ...
- 编写Java程序,遍历所有英雄信息(美和易思JDBC,PreparedStatement执行查询语句练习习题)
返回本章节 返回作业目录 需求说明: 继续完善英雄信息系统.使用JDBC技术,通过PreparedStatement对象的executeQuery()方法获取表示所有英雄数据的ResultSet结果集 ...
- 编写Java程序,利用List维护用户信息
返回本章节 返回作业目录 需求说明: 将新增的用户信息添加到List集合. 用户信息包括用户编号.姓名和性别. 按照姓名和性别查找用户信息. 实现思路: 创建类UserInfo,在该类中定义3个Str ...
- InnoDB学习(七)之索引结构
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息.可以将数据库索引和书的目录进行类比,通过书的目录我们可以快速查找到章节位置,如果没有目录就只能一页页翻书查找 ...
- Java基础(八)——IO流5_其他流
一.其他 1.System.in.System.out(标准输入.输出流) System.in:标准的输入流,默认从键盘输入. System.out:标准的输出流,默认从控制台输出. 改变标准输入输出 ...
- 服务性能监控之Micrometer详解
Micrometer 为基于 JVM 的应用程序的性能监测数据收集提供了一个通用的 API,支持多种度量指标类型,这些指标可以用于观察.警报以及对应用程序当前状态做出响应. 通过添加如下依赖可以将 M ...
- Sentine熔断降级进阶
sentinel和springCloud整合 减少开发的复杂度,对大部分的主流框架,例如:Web Servlet.Dubbo.Spring Cloud.gRPC.Spring WebFlux.Reac ...
- 面试官: Flink双流JOIN了解吗? 简单说说其实现原理
摘要:今天和大家聊聊Flink双流Join问题.这是一个高频面试点,也是工作中常遇到的一种真实场景. 本文分享自华为云社区<万字直通面试:Flink双流JOIN>,作者:大数据兵工厂 . ...