首先还是类似于无标号无向图计数那样,考虑点的置换带动边的置换,一定构成单射,根据 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. StringBoot

    1.首先我们需要依赖SpringBoot父工程,这是每个项目中必须要有的. <!--引入SpringBoot父依赖--><parent>        <groupId& ...

  2. 【C\C++笔记】register寄存器关键字

    使用寄存器变量提高运行速度 1未使用寄存器组 #include<stdio.h> int main(){ unsigned long a=0; for(int i=0;i<10000 ...

  3. 第四十七个知识点:什么是Fiat-Shamir变换?

    第四十七个知识点:什么是Fiat-Shamir变换? 只要Alice和Bob同时在线,Sigma协议能快速的完成Alice向Bob证明的任务.Alice向Bob发送承诺,Bob返回一个挑战,最后Ali ...

  4. Morphological Image Processing

    目录 概 reflection and translation Erosion and Dilation Erosion 示例 skimage.morphology.erosion dilation ...

  5. Differential Evolution: A Survey of the State-of-the-Art

    @ 目录 概 主要内容 DE/rand/1/bin DE/?/?/? DE/rand/1/exp DE/best/1 DE/best/2 DE/rand/2 超参数的选择 的选择 的选择 的选择 一些 ...

  6. 微信公众号开发--.net core接入

    .net进行微信公众号开发的例子好像比较少,这里做个笔记 首先,我们需要让微信能访问到我们的项目,所以要么需要有一个可以部署项目的连接到公网下的服务器,要么可以通过端口转发将请求转发到我们的项目,总之 ...

  7. 论文翻译:2021_Semi-Blind Source Separation for Nonlinear Acoustic Echo Cancellation

    论文地址:https://ieeexplore.ieee.org/abstract/document/9357975/ 基于半盲源分离的非线性回声消除 摘要: 当使用非线性自适应滤波器时,数值模型与实 ...

  8. 第10组 Alpha冲刺 (5/6)

    1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/13996848.html ·作业博客:https://edu.cnblogs.co ...

  9. angularJS中$digest already in progress报错解决方法

    看到一个前端群里有人问,就查了下解决"$digest already in progress"最好的方式,就是不要使用$scope.$apply()或者$scope.$digest ...

  10. 【Maven】maven 插件开发实战

    前言 众所周知,maven 实质上是一个插件执行框架,所有的工作都是通过插件完成的.包括我们日常使用到的类似 install.clean.deploy.compiler...这些命令,其实底层都是一个 ...