洛谷题面传送门

神仙题。

深夜写题解感受真好

我们考虑两个简单环 \(C_1,C_2\)​​​,我们假设颜色种类数为 \(k\)​​​,那么我们需要有 \(C_1,C_2\)​​​ 均符合条件,而由于 \(C_1\oplus C_2\)​​​ 也是环,因此我们也必须有 \(C_1\oplus C_2\)​​​ 符合条件。不难发现 \(C_1,C_2,C_1\oplus C_2\)​​​ 这三个环是由 \(C_1-(C_1\cap C_2),C_2-(C_1\cap C_2),C_1\cap C_2\)​​​ 这三部分两两组合得到的,记 \(X=C_1-(C_1\cap C_2),Y=C_2-(C_1\cap C_2),Z=C_1\cap C_2\)​​​,那么 \(C_1,C_2,C_1\oplus C_2\)​​​ 这三个条件均符合条件可以等价于 \(X+Y,X+Z,Y+Z\)​​​ 均符合条件。因此我们猜测 \(C_1,C_2,C_1\oplus C_2\)​​​ 均符合条件的充要条件是 \(X,Y,Z\)​​​ 上的染色都是“均匀”的,事实也的确如此,充分性显然,必要性的话大概就如果 \(X,Y,Z\)​​​ 中某种颜色的出现次数大于其大小除以 \(k\)​​​,那么不妨设是 \(X\)​​​ 中颜色 \(c\)​​​ 的出现次数大于 \(\dfrac{|X|}{k}\)​,假设 \(\Delta=cnt-\dfrac{|X|}{k}\)​​​,其中 \(cnt\)​ 为颜色 \(c\)​ 在 \(X\)​ 中的出现次数。那么在 \(Y\)​ 中 \(c\)​ 的出现次数必然是 \(\dfrac{|Y|}{k}-\Delta\),\(Z\) 也同理,这样颜色 \(c\) 在 \(Y,Z\) 中的出现次数就是 \(\dfrac{|Y|+|Z|}{k}-2\Delta\),不符合题意。

因此我们考虑这样一个过程:将所有简单环放入一个边集组成的集合 \(S\)。表示对于集合 \(S\) 中的所有边集,其染色必须是均匀的。每次取出集合中两个有交的边集 \(E_1,E_2\) 并将它们删除,然后将 \(E_1-(E_1\cap E_2),E_2-(E_1\cap E_2),E_1\cap E_2\) 重新加入边集,重复以上步骤直至不能再操作为止。那么进行这样的步骤之后 \(S\) 中的元素有什么性质呢?不难发现对于两条边 \(e_1,e_2\),如果它们都在某个环上出现过,并且存在一个环 \(C\) 满足 \(e_1\in C,e_2\notin C\),那么 \(e_1,e_2\) 最终肯定不在 \(S\) 中的同一个边集中,因为咱们这个过程中只有 split,没有 merge,因此如果它们本来就不在同一个边集中,那么在接下来的过程中肯定就更不会在了。反之,而对于两条边 \(e_1,e_2\),如果它们都在某个环上出现过,并且对于所有环 \(C\),都有 \(e_1,e_2\) 要么同时被包含在 \(C\) 中,要么同时不属于 \(C\),那么 \(e_1,e_2\) 肯定自始至终不会被分开,最终也肯定在同一集合中,因此我们得到性质:

Observation. 两条边 \(e_1,e_2\) 最终在 \(S\) 中的同一集合中的充要条件是,它们都在某个环上出现过,并且对于所有环 \(C\),都有 \(e_1,e_2\) 要么同时被包含在 \(C\) 中,要么同时不属于 \(C\)。​

考虑怎么将这个性质与答案挂钩。注意到我们在处理 \(S\) 中边集的过程中,始终有这样一条原则:对于 \(S\) 中所有边集,其染色必须是均匀的,即所有颜色的边在这个边集中的出现次数必须相同。因此对于最终的 \(S\),其符合条件的必要条件是 \(\forall E\in S,k\mid E\)。但这是否是充要条件呢?注意到如果 \(k\) 符合上述约定,那如果 \(S\) 中所有边集我们都对其进行均匀染色,那最终每个环肯定也是均匀的,因为最终每个边集中的每条边要么同时属于某个环,要么同时不属于,它们是一个整体,不会被拆开。

也就是说,我们只要求出最终 \(S\) 中每个元素大小的 \(\gcd\),设为 \(d\),那么最终答案组成的集合肯定恰好包含所有 \(d\) 的约数。考虑怎么求这个 \(\gcd\)。显然我们要求出每个边集的大小对吧,那么注意到对于两个边 \(e_1,e_2\) 而言,其在同一个集合中等价于 \(e_1,e_2\) 都不是割边(否则它们就不可能在某个简单环上),并且 \(G\) 去掉 \(e_1,e_2\) 后得到的图不连通。这下就好办了,枚举每一条非割边,然后统计删掉这条边后割边的数量,然后算下与原图中割边数量的差,然后求个 \(\gcd\) 即可。

时间复杂度 \(\mathcal O(m^2)\)。据说可以用某些神奇的随机权值+XOR 哈希的方法实现更优秀的复杂度,但是我不会(

const int MAXN=2000;
const int MAXM=2000;
int n,m,hd[MAXN+5],to[MAXM*2+5],nxt[MAXM*2+5],ec=1,ban=0,ans=0;
void adde(int u,int v){to[++ec]=v;nxt[ec]=hd[u];hd[u]=ec;}
int U[MAXN+5],V[MAXN+5];bool is[MAXM+5],_is[MAXM+5];
int dfn[MAXN+5],low[MAXN+5],tim=0,res=0,_res=0;
void tarjan(int x,int f){
dfn[x]=low[x]=++tim;
for(int e=hd[x];e;e=nxt[e]){
int y=to[e];if(y==f||(e>>1)==ban) continue;
if(!dfn[y]){
tarjan(y,x);chkmin(low[x],low[y]);
if(low[y]>dfn[x]) is[e>>1]=1,res++;
} else chkmin(low[x],dfn[y]);
}
}
void work(){
memset(dfn,0,sizeof(dfn));memset(low,0,sizeof(low));tim=res=0;
for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i,0);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d",&U[i],&V[i]);
adde(U[i],V[i]);adde(V[i],U[i]);
} work();memcpy(_is,is,sizeof(is));_res=res;
for(int i=1;i<=m;i++) if(!_is[i]){
ban=i;work();ans=__gcd(ans,res-_res+1);
}
for(int i=1;i<=m;i++) if(ans%i==0) printf("%d ",i);
return 0;
}

洛谷 P6914 - [ICPC2015 WF]Tours(割边+找性质)的更多相关文章

  1. 洛谷 P6776 - [NOI2020] 超现实树(找性质,神仙题)

    洛谷题面传送门 nb tea 一道! 首先考虑怎样入手分析这个看似非常不可做的问题.首先题目涉及高度无穷的树,根本枚举不了.不过我们冷静一下就会发现,如果我们记 \(mx=\max\limits_{i ...

  2. 洛谷 P6775 - [NOI2020] 制作菜品(找性质+bitset 优化 dp)

    题面传送门 好久没写过题解了,感觉几天没写手都生疏了 首先这种题目直接做肯定是有些困难的,不过注意到题目中有个奇奇怪怪的条件叫 \(m\ge n-2\),我们不妨从此入手解决这道题. 我们先来探究 \ ...

  3. 洛谷 P6860 - 象棋与马(找性质+杜教筛)

    题面传送门 首先我们来探究一下什么样的 \((a,b)\) 满足 \(p(a,b)=1\).不难发现只要点 \((1,0)\) 能够到达,那么网格上所有点都能到达,因为由于 \((1,0)\) 能够到 ...

  4. 洛谷 P3951 小凯的疑惑 找规律

    目录 题面 题目链接 题目描述 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例: 输出样例: 说明 思路 证明 AC代码 include<bits/stdc++.h> 题面 ...

  5. BZOJ2801/洛谷P3544 [POI2012]BEZ-Minimalist Security(题目性质发掘+图的遍历+解不等式组)

    题面戳这 化下题面给的式子: \(z_u+z_v=p_u+p_v-b_{u,v}\) 发现\(p_u+p_v-b_{u,v}\)是确定的,所以只要确定了一个点\(i\)的权值\(x_i\),和它在同一 ...

  6. 洛谷P3966 [TJOI2013]单词(fail树性质)

    P3966 [TJOI2013]单词 题目链接:https://www.luogu.org/problemnew/show/P3966 题目描述 小张最近在忙毕设,所以一直在读论文.一篇论文是由许多单 ...

  7. 洛谷P3111 [USACO14DEC]牛慢跑Cow Jog_Sliver 性质分析

    Code: #include<cstdio> #include<algorithm> #include<cstring> using namespace std; ...

  8. 洛谷 1938 [USACO09NOV]找工就业Job Hunt

    洛谷 1938  [USACO09NOV]找工就业Job Hunt 题目描述 Bessie is running out of money and is searching for jobs. Far ...

  9. 【洛谷 5002】专心OI - 找祖先 (树上计数)

    专心OI - 找祖先 题目背景 \(Imakf\)是一个小蒟蒻,他最近刚学了\(LCA\),他在手机\(APP\)里看到一个游戏也叫做\(LCA\)就下载了下来. 题目描述 这个游戏会给出你一棵树,这 ...

随机推荐

  1. 【UE4 C++】Tick的三种方式、异步蓝图节点

    Tick的三种方式 包括 默认 Tick (Actor.Component.UMG) TimerManager 定时器 FTickableGameObject 可以写原生 Object 也可以继承UO ...

  2. Sobol 序列并行化的实践经验

    目录 Sobol 序列并行化的实践经验 随机数发生器并行化的常见策略 Sobol 序列的原理和跳转功能 Sobol 序列并行化实践 分块策略 蛙跳策略 蛙跳策略的计算量分析 减少异或计算的技巧 分块策 ...

  3. 反调试——11——检测TF标志寄存器

    反调试--11--检测TF标志寄存器 在intel的x86寄存器中有一种叫标志寄存器: 标志寄存器中的TF(Trap Flag)位,CPU在执行完一条指令后,如果检测到标志寄存器的TF位为1,则会产生 ...

  4. Django(72)Django认证系统库--djoser

    djoser是什么?   作用:Django认证系统的REST实现.djoser库提供了一组Django Rest Framework视图,用于处理注册.登录.注销.密码重置和帐户激活等基本操作.它适 ...

  5. candy leetcode C++

    There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...

  6. Luogu P1118 [USACO06FEB]数字三角形 Backward Digit Sums | 搜索、数学

    题目链接 思路:设一开始的n个数为a1.a2.a3...an,一步一步合并就可以用a1..an表示出最后剩下来的数,不难发现其中a1..an的系数恰好就是第n层杨辉三角中的数.所以我们可以先处理出第n ...

  7. DeWeb第1个通用化模块:登录模块,仅需要修改一个配置文件即可实现登录功能

    演示: https://delphibbs.com/login.dw 开发环境和源代码 https://gitee.com/xamh/dewebsdk 效果图: 配置方法: 在Runtime目录中放一 ...

  8. 【mysql2】下载安装mysql5.7版|不再更新系列

    一.下载MySQL 5.7 版 MySQL 5.7 版:官网下载地址 https://dev.mysql.com/downloads/windows/installer/5.7.html 下载的是50 ...

  9. 【编译原理】LL1文法语法分析器

    上篇文章[编译原理]语法分析--自上向下分析 分析了LL1语法,文章最后说给出栗子,现在补上去. 说明: 这个语法分析器是利用LL1分析方法实现的. 预测分析表和终结符以及非终结符都是针对一个特定文法 ...

  10. TDSQL | 在整个技术解决方案中HTAP对应的混合交易以及分析系统应该如何实现?

    从主交易到传输,到插件式解决方案,每个厂商对HTAP的理解和实验方式都有自己的独到解法,在未来整个数据解决方案当中都会往HTAP中去牵引.那么在整个技术解决方案中HTAP对应的混合交易以及分析系统应该 ...