BZOJ4116 : [Wf2015]Tours
将边集划分成若干极大不相交集合,满足每个简单环都可以由某些集合相加得到,则答案就是这些集合大小的$\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的更多相关文章
- [Wf2015]Tours
[Wf2015]Tours 题目 给定一张n个点m条边的无向图,你需要选择一个颜色种类数k,然后用这k种颜色给每条边染色,要求对于图中任意一个简单环,每种颜色的边的数量都相同,求所有可行的k INPU ...
- 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难度 提高+/省选-提交该题 讨论 题解 记录 最新讨论 输出格式题目 ...
随机推荐
- IOS开发之实现App消息推送
转自:http://blog.csdn.net/shenjie12345678/article/details/41120637 第一部分 首先第一步当然是介绍一下苹果的推送机制(APNS)咯(ps: ...
- hud 1019最小公倍数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1019 思路:头两个数先求,再用所求的数与后面的一个数求,依次类推 #include<stdlib ...
- EF学习 笔记-----EF映射
http://www.cnblogs.com/guomingfeng/archive/2013/06/15/mvc-ef-configuration-migration.html EF flountA ...
- C#的初始化器
using System; using System.Collections; using System.Collections.Generic; using System.IO; using Sys ...
- Pyqt 获取windows系统中已安装软件列表
开始之前的基础知识 1. 获取软件列表 在Python的标准库中,_winreg可以操作Windows的注册表.获取已经安装的软件列表一般是读去windows的注册表: SOFTWARE\Micros ...
- Yii 同域名的单点登录 SSO实现
SSO (Single Sign-on) 顾名思义就是几个子项目共用一个登录点. 原理简单来说就是服务端session 共享, 客户端跨域cookies. 实现非常简单,protected/confi ...
- Pyqt 中__init__(self,parent==None) parent理解
参考: 在PyQt中,所有class都是从QObject派生而来,QWidget对象就可以有一个parent.这种parent-child关系主要用于两个方面: 没有parent的QWidget类被认 ...
- 无废话ExtJs 入门教程十[单选组:RadioGroup、复选组:CheckBoxGroup]
无废话ExtJs 入门教程十[单选组:RadioGroup.复选组:CheckBoxGroup] extjs技术交流,欢迎加群(201926085) 继上一节内容,我们在表单里加了个一个单选组,一个复 ...
- android 入门-布局
android:gravity 针对本view 的位置. android:layout_gravity 本view相对于父布局view的位置. android:layout_alignParentRi ...
- wp8 入门到精通 仿QQPivot 提示数量
<Grid x:Name="LayoutRoot" Background="White"> <Grid Width="480&quo ...