洛谷题面传送门

神仙题。

深夜写题解感受真好

我们考虑两个简单环 \(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. Bootstrap响应式的导航栏

    Bootstrap 导航栏 | 菜鸟教程 <!DOCTYPE html> <html> <head> <meta charset="utf-8&qu ...

  2. 《手把手教你》系列技巧篇(三十三)-java+ selenium自动化测试-单选和多选按钮操作-上篇(详解教程)

    1.简介 在实际自动化测试过程中,我们同样也避免不了会遇到单选和多选的测试,特别是调查问卷或者是答题系统中会经常碰到.因此宏哥在这里直接分享和介绍一下,希望小伙伴或者童鞋们在以后工作中遇到可以有所帮助 ...

  3. VMD可视化hdf5格式的分子坐标文件

    技术背景 VMD是分子动力学模拟领域常用的一款可视化软件,可以非常直观方便的展示分子的运动过程.而VMD本身对展现的格式有一定的要求,如果不是常见的rst等类型的坐标文件的话,就需要自己手动去实现一个 ...

  4. 阿里大神favoorr提供的书单

     Thoughtwoks中国的推荐书单 <http://www.douban.com/doulist/2012097/ >新浪微博-秦迪 <http://blog.2baxb.me/ ...

  5. 谈谈BEM规范(含代码)

    css规范之BEM规范 前言 引用一句经典名言在编程的世界里其中一件最难的事情就是命名,不管是设计到编程语言还是标记语言都会有命名的需求.今天聊的就是关于css的命名规范的发展过程以及演变. 命名的发 ...

  6. java调用js脚本语言

    在我们开发的过程中,可能有这么一种情况,在java中需要取调用js方法完成一些事情.那么什么时候可能出现这种情况呢.比如我们使用爬虫模拟登录别的网站,但有些网站前台使用js对密码进行了加密处理,那么就 ...

  7. FastAPI 学习之路(二十八)使用密码和 Bearer 的简单 OAuth2

    OAuth2 规定在使用(我们打算用的)「password 流程」时,客户端/用户必须将 username 和 password 字段作为表单数据发送.我们看下在我们应该去如何实现呢. 我们写一个登录 ...

  8. HDMI之TMDS通道

    HDMI标准继续沿用了和DVI相同的,由Silicon Image公司发明的TMDS(Time Minimized Differential Signal)最小化传输差分信号传输技术.TMDS是一种微 ...

  9. 痞子衡嵌入式:超级下载算法RT-UFL v1.0在Segger Ozone下的使用

    痞子衡主导的"学术"项目 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计> v1.0 版发布近 4 个月了,部分客户已经在实际项目开发调试中用上了这个 ...

  10. single-number-ii leetcode C++

    Given an array of integers, every element appears three times except for one. Find that single one. ...