[Wf2015]Tours
[Wf2015]Tours
题目
给定一张n个点m条边的无向图,你需要选择一个颜色种类数k,然后用这k种颜色给每条边染色,要求对于图中任意一个简单环,每种颜色的边的数量都相同,求所有可行的k
INPUT
第一行两个正整数n,m
接下来m行,每行两个正整数x,y(1<=x<y<=n),代表一条无向边
数据保证无重边无自环OUTPUT
一行输出所有可行的k,按递增顺序输出 6 6 1 2 2 3 1 3 1 4 2 5 3 6
SAMPLE
INPUT
6 6
1 2
2 3
1 3
1 4
2 5
3 6OUTPUT
1 3
解题报告
其实这道题的关键在于找到每个简单环的边数,所以我们考虑如何处理简单环
显然,在一个简单环中,删去一条边,剩下的边就会变为割边
所以就可以得出做法:枚举原图非桥边,删去该边,处理出新增的桥边数量,所有数量+1的$GCD$所有的因数即为答案
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
inline int read(){
int sum();char ch(getchar());
for(;ch<''||ch>'';ch=getchar());
for(;ch>=''&&ch<='';sum=sum*+(ch^),ch=getchar());
return sum;
}
int n,m,tot,ans(-);
int dfn[],low[],cnt,tmp;
int fro[],to[];
bool bridge[],vis[];
struct edge{
int e,id;
edge *n;
}*pre[],a[];
inline void insert(int s,int e,int id){
a[++tot].e=e;
a[tot].id=id;
a[tot].n=pre[s];
pre[s]=&a[tot];
}
inline void init(){
memset(pre,NULL,sizeof(pre));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
tot=cnt=tmp=;
}
inline void tarjan(int u,int fa){
dfn[u]=low[u]=++cnt;
for(edge *i=pre[u];i;i=i->n){
int e(i->e);if(e==fa)continue;
if(!dfn[e]){
tarjan(e,u);
low[u]=min(low[u],low[e]);
if(low[e]>dfn[u])bridge[i->id]=;
}
else low[u]=min(low[u],dfn[e]);
}
}
inline void dfs(int u,int fa){
dfn[u]=low[u]=++cnt;
for(edge *i=pre[u];i;i=i->n){
int e(i->e);if(e==fa)continue;
if(!dfn[e]){
dfs(e,u);
low[u]=min(low[u],low[e]);
if(low[e]>dfn[u]&&bridge[i->id]==)++tmp,vis[i->id]=;
}
else low[u]=min(low[u],dfn[e]);
}
}
inline int gcd(int x,int y){
return x%y?gcd(y,x%y):y;
}
int main(){
n=read();m=read();
for(int i=;i<=m;++i){
int x(read()),y(read());
fro[i]=x;to[i]=y;
insert(x,y,i);insert(y,x,i);
}
for(int i=;i<=n;++i)
if(!dfn[i])
tarjan(i,);
for(int i=;i<=m;++i){
if(bridge[i]||vis[i])continue;
init();
// for(int j=1;j<=m;++j)cout<<j<<' '<<bridge[j]<<endl;cout<<endl;//cout<<"ban "<<i<<endl;
for(int j=;j<=m;++j)
if(j^i){//cout<<j<<' '<<fro[j]<<' '<<to[j]<<endl;
insert(fro[j],to[j],j);
insert(to[j],fro[j],j);
}
for(int j=;j<=n;++j)
if(!dfn[j])
dfs(j,);
// for(int j=1;j<=m;++j)cout<<j<<' '<<bridge[j]<<endl;cout<<endl;
if(ans==-)ans=tmp+;
else ans=gcd(ans,tmp+);
// cout<<tmp<<' '<<ans<<endl;
}
// cout<<ans<<endl;
for(int i=;i<=ans;++i)
if(ans%i==){
printf("%d",i);
if(i^ans)putchar(' ');
}
}
[Wf2015]Tours的更多相关文章
- BZOJ4116 : [Wf2015]Tours
将边集划分成若干极大不相交集合,满足每个简单环都可以由某些集合相加得到,则答案就是这些集合大小的$\gcd$的约数. 对于一个简单环,上面的边一定不是桥边,而和它在一个集合的边肯定不在其他简单环上.因 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- Web Tours自带示例网站无法打开的解决方案
问题现象: LoadRunner自带的测试样品,旅行社机票预订系统HP Web Tours以下简称为Web Tours. 1.LoadRunner程序的Sample目录下无Web和Web Tours服 ...
- URAL 1077 Travelling Tours(统计无向图中环的数目)
Travelling Tours Time limit: 1.0 secondMemory limit: 64 MB There are N cities numbered from 1 to N ( ...
- HP Web Tours分析
1.启动Web Tours 2.首页结构 3.预定机票
- USACO 2.4 Cow Tours
Cow Tours Farmer John has a number of pastures on his farm. Cow paths connect some pastures with cer ...
- BZOJ 4108: [Wf2015]Catering [上下界费用流]
4108: [Wf2015]Catering 题意:有一家装备出租公司收到了按照时间顺序排列的n个请求. 这家公司有k个搬运工.每个搬运工可以搬着一套装备按时间顺序去满足一些请求.一个搬运工从第i个请 ...
- 【BZOJ4108】[Wf2015]Catering 有上下界费用流
[BZOJ4108][Wf2015]Catering Description 有一家装备出租公司收到了按照时间顺序排列的n个请求. 这家公司有k个搬运工.每个搬运工可以搬着一套装备按时间顺序去满足一些 ...
- 洛谷P1522 牛的旅行 Cow Tours
---恢复内容开始--- P1522 牛的旅行 Cow Tours189通过502提交题目提供者该用户不存在标签 图论 USACO难度 提高+/省选-提交该题 讨论 题解 记录 最新讨论 输出格式题目 ...
随机推荐
- 基于CentOS6.5下Suricata(一款高性能的网络IDS、IPS和网络安全监控引擎)的搭建(图文详解)(博主推荐)
不多说,直接上干货! 为什么,要写这篇论文? 是因为,目前科研的我,正值研三,致力于网络安全.大数据.机器学习研究领域! 论文方向的需要,同时不局限于真实物理环境机器实验室的攻防环境.也不局限于真实物 ...
- Vue.js学习笔记--3.表单输入绑定
整理自官网教程 -- https://cn.vuejs.org/ 利用v-model可以实现表单元素的value与后台数据的双向绑定,具体用法如下: <!--文本--> <input ...
- C#中的事件机制
这几天把事件学了一下,总算明白了一些.不多说了,直接代码. class Program { static void Main(string[] args) { CatAndMouse h = new ...
- iOS---iPad开发及iPad特有的特技
iPad开发简单介绍 iPad开发最大的不同在于iPhone的就是屏幕控件的适配,以及横竖屏的旋转. Storyboard中得SizeClass的横竖屏配置,也不支持iPad开发. 1.在控制器中得到 ...
- linux 10201 ASM RAC 安装+升级到10205
准备环境的时 ,要4个对外IP,2个对内IP 不超过2T,,一般都用OCFS 高端存储适合用ASM linux10G安装的时候,安装的机器时间要小于等于(如果是等于要严格等于)第二个机器的时间(只有l ...
- CREATE CONSTRAINT TRIGGER - 定义一个新的约束触发器
SYNOPSIS CREATE CONSTRAINT TRIGGER name AFTER events ON tablename constraint attributes FOR EACH ROW ...
- vue之$mount
数据挂载 在实例化Vue的时候,两种方式挂载数据 方法一:最常用的方法 var app=new vue({ el:"#app", data(){} ````` }) 注:文档中最常 ...
- qemu启动vm后,如何host上使用ssh连接?
qemu启动vm后,如何从host ssh连接vm? qemu启动参数 启动命令: ${cmd_qemu_system} --enable-kvm \ -machine type=q35,accel= ...
- 阿里云 Django部署参考
Linux下安装Python3和django并配置mysql作为django默认服务器 CentOS7.3安装Python3.6 yum except KeyboardInterrupt, e: 错误 ...
- IOS开发之关键字synchronized
static Config * instance = nil; +(Config *) Instance { @synchronized(self) { if(nil == instance) { ...