将边集划分成若干极大不相交集合,满足每个简单环都可以由某些集合相加得到,则答案就是这些集合大小的$\gcd$的约数。

对于一个简单环,上面的边一定不是桥边,而和它在一个集合的边肯定不在其他简单环上。因此删除它之后,这些边就从非桥边变成了桥边。

枚举每条非桥边跑Tarjan计算答案即可。

时间复杂度$O(m(n+m))$。

#include<cstdio>
const int N=2005,BUF=21000;
int n,m,i,x,y,now,ans,D,cut[N],g[N],v[N<<1],nxt[N<<1],ed=1;
int q[N<<1],*st[N],*en[N],dfn[N],low[N],num;char Buf[BUF],*buf=Buf;
inline void read(int&a){for(a=0;*buf<48;buf++);while(*buf>47)a=a*10+*buf++-48;}inline void add(int x,int y){v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}
void dfs(int x,int y){
dfn[x]=low[x]=++num;
for(int*i=st[x];i<en[x];i++){
int u=(*i)&2047;
if(u==y)continue;
if(!dfn[u]){
dfs(u,x);
if(low[x]>low[u])low[x]=low[u];
if(low[u]==dfn[u])cut[(*i)>>12]=1;
}else if(low[x]>dfn[u])low[x]=dfn[u];
}
}
void tarjan(int x,int y){
dfn[x]=low[x]=++num;
for(int*i=st[x];i<en[x];i++)if(((*i)>>12)!=D){
int u=*i&2047;
if(u==y)continue;
if(!dfn[u]){
tarjan(u,x);
if(low[x]>low[u])low[x]=low[u];
if(low[u]==dfn[u]&&!cut[(*i)>>12])now++;
}else if(low[x]>dfn[u])low[x]=dfn[u];
}
}
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int main(){
fread(Buf,1,BUF,stdin),read(n),read(m);
for(i=1;i<=m;i++)read(x),read(y),add(x,y),add(y,x);
for(i=1;i<=n;i++){
st[i]=q+num+1;
for(x=g[i];x;x=nxt[x])q[++num]=x<<11|v[x];
en[i]=q+num+1;
}
for(num=0,i=1;i<=n;i++)if(!dfn[i])dfs(i,0);
for(D=1;D<=m;D++)if(!cut[D]){
for(now=i=1,num=0;i<=n;i++)dfn[i]=0;
for(i=1;i<=n;i++)if(!dfn[i])tarjan(i,0);
if(!ans)ans=now;else ans=gcd(ans,now);
}
for(i=1;i<=ans;i++)if(ans%i==0)printf("%d%c",i,i<ans?' ':'\n');
return 0;
}

  

BZOJ4116 : [Wf2015]Tours的更多相关文章

  1. [Wf2015]Tours

    [Wf2015]Tours 题目 给定一张n个点m条边的无向图,你需要选择一个颜色种类数k,然后用这k种颜色给每条边染色,要求对于图中任意一个简单环,每种颜色的边的数量都相同,求所有可行的k INPU ...

  2. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  3. Web Tours自带示例网站无法打开的解决方案

    问题现象: LoadRunner自带的测试样品,旅行社机票预订系统HP Web Tours以下简称为Web Tours. 1.LoadRunner程序的Sample目录下无Web和Web Tours服 ...

  4. URAL 1077 Travelling Tours(统计无向图中环的数目)

    Travelling Tours Time limit: 1.0 secondMemory limit: 64 MB There are N cities numbered from 1 to N ( ...

  5. HP Web Tours分析

    1.启动Web Tours 2.首页结构 3.预定机票

  6. USACO 2.4 Cow Tours

    Cow Tours Farmer John has a number of pastures on his farm. Cow paths connect some pastures with cer ...

  7. BZOJ 4108: [Wf2015]Catering [上下界费用流]

    4108: [Wf2015]Catering 题意:有一家装备出租公司收到了按照时间顺序排列的n个请求. 这家公司有k个搬运工.每个搬运工可以搬着一套装备按时间顺序去满足一些请求.一个搬运工从第i个请 ...

  8. 【BZOJ4108】[Wf2015]Catering 有上下界费用流

    [BZOJ4108][Wf2015]Catering Description 有一家装备出租公司收到了按照时间顺序排列的n个请求. 这家公司有k个搬运工.每个搬运工可以搬着一套装备按时间顺序去满足一些 ...

  9. 洛谷P1522 牛的旅行 Cow Tours

    ---恢复内容开始--- P1522 牛的旅行 Cow Tours189通过502提交题目提供者该用户不存在标签 图论 USACO难度 提高+/省选-提交该题 讨论 题解 记录 最新讨论 输出格式题目 ...

随机推荐

  1. AJAX 三级联动

    新的封装类 <?php class DBDA { public $host="localhost";//服务器地址 public $uid="root"; ...

  2. Maven+druid+MyBatis+Spring+Oracle+Dubbo开发环境搭建

    1.开发工具使用: MyEclipse或Eclipse,数据库使用Oracle.需要用到的软件有Zookeeper(注册中心),Tomcat(Web容器)和Maven(包管理). 2.初始环境配置: ...

  3. WiFi基本知识

    转自:http://blog.csdn.net/myarrow/article/details/7930131 1. IE802.11简介 标准号 IEEE 802.11b IEEE 802.11a ...

  4. sdut 2449走迷宫【最简单的dfs应用】

    走迷宫 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_ 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m) ...

  5. 以16进制打印出一块内存buff

    如下代码(支持windows与Linux)会以[16进制][每行16字节]打印出一块内存的内容: void PrintBuffer(void* pBuff, unsigned int nLen) { ...

  6. Tiny Rss Reader - 迷你RSS阅读器

    发布新软件 TinyRss: Windows平台上的一个小巧的Rss阅读器. 用户界面: 项目地址: https://github.com/movsb/tinyrss.git 测试下载: http:/ ...

  7. Linux环境下使用shell编写CGI(httpd)

    /var/www/cgi-bin/hello.sh #!/bin/bash echo "Content-type: text/html" echo "" ech ...

  8. java的安装环境配置详细步骤

    --------------------声明,如果你有什么建议或者不懂的地方,欢迎回复,我们可以互相学习,转载请注明出处,谢谢---------------- 首先得安装jdk(Java Develo ...

  9. python 定义实例方法

    定义实例方法 一个实例的私有属性就是以__开头的属性,无法被外部访问,那这些属性定义有什么用? 虽然私有属性无法从外部访问,但是,从类的内部是可以访问的.除了可以定义实例的属性外,还可以定义实例的方法 ...

  10. SpringMyBatis解析4-MapperScannerConfigurer

    如果有成百上千个dao接口呢,那我们岂不是要配置添加成百上千个bean,当然不是这样,spring还为MyBatis添加了拓展的功能,可以通过扫描包目录的方式,添加dao,让我看看具体使用和实现. & ...