首先还是类似于无标号无向图计数那样,考虑点的置换带动边的置换,一定构成单射,根据 Burnside 引理:

\[|X / G| = \frac{1}{|G|}\sum\limits_{g \in G} |X ^ g|
\]

于是我们只需要考虑每个(点)置换下边置换的不动点(要求使得每个点度数为偶数)即可,有如下观察:

  • 对于两个点循环置换 \(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|])\),最终合起来贡献为:

\[\sum\limits_{i = 1} ^ k \lfloor \frac{a_i - 1}{2} \rfloor + \sum\limits_{i < j}(a_i, a_j) - (\sum\limits_{i = 1} ^ k [2 \nmid a_i] - [\exists 1 \le i \le k, 2 \nmid a_i])
\]

其中 \(a\) 为点循环置换的大小序列,注意到数据范围较小,可以直接枚举所有划分数。

运用无标号无向图搜索的方法和精细实现,复杂度可以做到接近划分数数量,下面这份代码可以在 \(2s\) 内跑出 \(90\).

代码

洛谷 P4708 画画(无标号欧拉子图计数)的更多相关文章

  1. 洛谷 P4708 - 画画(Burnside 引理+组合数学)

    洛谷题面传送门 神仙题 %%%%%%%%%%%%%%%%%%%% 题解搬运人来了 首先看到本质不同(无标号)的图计数咱们可以想到 Burnside 引理,具体来说,我们枚举一个排列 \(p\),并统计 ...

  2. 洛谷UVA12995 Farey Sequence(欧拉函数,线性筛)

    洛谷题目传送门 分数其实就是一个幌子,实际上就是求互质数对的个数(除开一个特例\((1,1)\)).因为保证了\(a<b\),所以我们把要求的东西拆开看,不就是\(\sum_{i=2}^n\ph ...

  3. 洛谷P3601签到题(欧拉函数)

    题目背景 这是一道签到题! 建议做题之前仔细阅读数据范围! 题目描述 我们定义一个函数:qiandao(x)为小于等于x的数中与x不互质的数的个数. 这题作为签到题,给出l和r,要求求. 输入输出格式 ...

  4. 洛谷$P1390$ 公约数的和 欧拉函数

    正解:欧拉函数 解题报告: 传送门$QwQ$ 首先显然十分套路地变下形是趴 $\begin{align*}&=\sum_{i=1}^n\sum_{j=1}^n gcd(i,j)\\&= ...

  5. 洛谷 P4708 画画

    题意 在所以置换下,本质不同的各个极大连通子图均含有欧拉闭迹的\(n\)阶图个数 做法 务必先做完这题再看此题解,因为会省略大部分分析了 仍是从边入手,隔外限制:各个点度数是偶数 某个因子内\((m= ...

  6. 【洛谷 UVA11417】 GCD(欧拉函数)

    我们枚举所有gcd \(k\),求所有\(gcd=k\)的数对,记作\(f(k)\),那么\(ans=\sum_{i=1}^{n}(f(i)-1)*i\).为什么减1呢,观察题目,发现\(j=i+1\ ...

  7. 洛谷 - P3768 - 简单的数学题 - 欧拉函数 - 莫比乌斯反演

    https://www.luogu.org/problemnew/show/P3768 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}ijgcd(i ...

  8. 洛谷P1170 兔八哥与猎人 欧拉函数的应用

    https://www.luogu.org/problem/P1170 #include<bits/stdc++.h> using namespace std; ],b[],c[],d[] ...

  9. 洛谷 P1341 无序字母对(欧拉路)

    P1341 无序字母对 题目提供者yeszy 标签 福建省历届夏令营 难度 提高+/省选- 最新讨论 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造 ...

随机推荐

  1. MySQL中写操作

    具体到操作流程: 当执行某个写操作的 SQL 时,引擎将这行数据更新到内存的同时把对应的操作记录到 redo log 里面,然后处于 prepare 状态.并把完成信息告知给执行器. 执行器生成对应操 ...

  2. matplotlib 高阶之patheffect (阴影,强调)

    目录 添加阴影 使Artist变得突出 更多效果 我们可以通过path来修饰Artist, 通过set_path_effects import matplotlib.pyplot as plt imp ...

  3. uniapp中scroll-view自定义滚动条

    注意事项 需在app.vue中添加如下,需要important /*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/ ::-webkit-scrollbar { width: 16upx!imp ...

  4. ssm项目使用过滤器出现4040错误

    目录 问题 解决方法 (1)方法一 (2)方法二 问题 过滤器处理乱码问题 public class CharFilter implements Filter { @Override public v ...

  5. 【VUE】VUE使用常见问题搜集

    文章目录 1.日期格式化 2.引用JSON文件中的数据 1.日期格式化 安装插件,官网:Moment.js npm install moment --save 示例: //Sat Mar 14 202 ...

  6. java POJO中 Integer 和 int 的不同,用int还是用Integer

    https://www.jianshu.com/p/ff535284916f [int和Integer的区别] int是java提供的8种原始类型之一,java为每个原始类型提供了封装类,Intege ...

  7. win10 配置maven

    1.官网下载后,解压到需要的文件夹 2.进入文件夹,获取根目录的路径 3.配置环境变量 两个都要 M2_HOME MAVEN_HOME 3.配置path ,以相对路径的方式配置bin目录 4.测试是否 ...

  8. Static 静态+this

    (一):静态 1.Static修饰的都是静态的,都是类相关的,不需要new对象,直接采用类名.的方式访问 2.当一个属性是类级别的,所有对象的这个属性都是一样的,直接定义为静态 类=属性+方法 属性描 ...

  9. linux高大上命令001

        [ linux命令 sed ] sed是一个管道命令,可以分析standard input 而且sed可以将数据进行替换.删除.新增.选取的特定的功能 sed [-nefr] [动作] -n ...

  10. 简单Spring MVC项目搭建

    1.新建Project 开发环境我使用的是IDEA,其实使用什么都是大同小异的,关键是自己用的顺手. 首先,左上角File→New→Project.在Project页面选择Maven,然后勾上图中所示 ...