2008年NOI全国竞赛 假面舞会
/*
分三种情况
1 有环:找环长的gcd作为max gcd的超过2的最小因子作为min
2 树:所有最长链的和作为max 3为min (最长链≥3)
3 两条相交链:找出所有的这样的两条链的差 同1求
显然第三种不好处理 看了别人的做法是+反向-1的边 1 3就能合并了.
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define maxn 1000010
#define pa pair<int,int>
using namespace std;
int n,m,num,head[maxn],dfn[maxn],topt;
int c[maxn],sum,Gcd,ans,maxx,minn,x,y,d[maxn];
bool f[maxn];
struct node
{
int v,pre,t;
}e[maxn],ei[maxn];
int gcd(int a,int b)
{
return !b?a:gcd(b,a%b);
}
int abs(int a)
{
return a<?-a:a;
}
void Add(int from,int to,int dis)
{
num++;e[num].v=to;
e[num].t=dis;
e[num].pre=head[from];
head[from]=num;
}
void Tarjan(int x)
{
dfn[x]=++topt;f[x]=;
for(int i=head[x];i;i=e[i].pre)
{
int v=e[i].v;
if(f[v]==)d[v]=d[x]+e[i].t,Tarjan(v);
else c[++sum]=abs(d[x]-d[v]+e[i].t);
}
}
int Get_gcd()
{
Gcd=c[];
for(int i=;i<=sum;i++)
Gcd=gcd(Gcd,c[i]);
return Gcd;
}
int Get_min()
{
int tmp=Gcd+;
for(int i=;i<=Gcd;i++)
if(Gcd%i==)
tmp=min(tmp,i);
if(tmp==Gcd+)tmp=-;
return tmp;
}
void Dfs(int x)
{
f[x]=;
for(int i=head[x];i;i=e[i].pre)
{
int v=e[i].v;
if(f[v])continue;
d[v]=d[x]+e[i].t;Dfs(v);
}
maxx=max(maxx,d[x]);
minn=min(minn,d[x]);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
scanf("%d%d",&x,&y),Add(x,y,),Add(y,x,-);
for(int i=;i<=n;i++)
if(dfn[i]==)Tarjan(i);
Gcd=Get_gcd();ans=Get_min();
if(Gcd)
{
if(Gcd<)Gcd=ans=-;
printf("%d %d\n",Gcd,ans);
return ;
}
ans=;memset(f,,sizeof(f));
for(int i=;i<=n;i++)
if(f[i]==)
{
maxx=;minn=maxn;Dfs(i);
ans+=maxx-minn+;
}
if(ans>)printf("%d 3\n",ans);
else printf("-1 -1\n");
return ;
}
2008年NOI全国竞赛 假面舞会的更多相关文章
- Codevs 1800 假面舞会 2008年NOI全国竞赛
1800 假面舞会 2008年NOI全国竞赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 一年一度的假面舞会又开始了,栋栋也 ...
- Codevs 1074 食物链 2001年NOI全国竞赛
1074 食物链 2001年NOI全国竞赛 时间限制: 3 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 动物王国中有三类动物 A,B ...
- 1729 单词查找树 2000年NOI全国竞赛
1729 单词查找树 2000年NOI全国竞赛 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 在进行文法分析的 ...
- 1074 食物链 2001年NOI全国竞赛
1074 食物链 2001年NOI全国竞赛 时间限制: 3 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题目描述 Description 动物王国中有三类动物 ...
- CODEVS 1074 食物链 2001年NOI全国竞赛(洛谷 P2024)
题目描述 Description 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A吃B,B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并 ...
- 食物链 2001年NOI全国竞赛
时间限制: 3 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题目描述 Description 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A吃B ...
- 1722 最优乘车 1997年NOI全国竞赛
题目描述 Description H城是一个旅游胜地,每年都有成千上万的人前来观光.为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴上线路.每条单程巴士线路从某个巴士 ...
- 银河英雄传说 2002年NOI全国竞赛
时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年 ...
- NOI全国赛(2001)--食物链
今天写了道并查集的题,看来并查集的题刷少了,,,,,用法好神奇啊!!!开三倍并查集 用i表示自己,i+n存天敌,i+2*n存可以克制de,再逻辑判断一下即可. 所以,要意识到并查集的分类处理可以开不同 ...
随机推荐
- HTML5和CSS3:游戏的变革Flexbox
HTML5和CSS3给网络开发者提供了新的语法标签,本地动画工具,服务器端字体等等新增功能,这些并不是结束.开发者正苦于为网页设计挖出一条战壕 - 真正的页面排版工具,事实上,即便是最有前途的CSS3 ...
- oracle触发器应用
首先给大家推荐两篇我看后的博文,我已经内容转载过来: 1.对触发器的讲解 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建 ...
- PHP错误报告级别及调整方法
运行PHP脚本时,PHP解析器会尽其所能能报告它遇到的问题.在PHP中错误报告的处理行为,都是通过PHP的配置文件php.ini中有关的配置指令确定的.另外PHP的错误报告有很多种级别,可以根据不同的 ...
- EclipsePHP Studio 常用设置笔记
工作需要,学习PHP使用EclipsePHP Studio开发工具, 习惯整理下常用的使用设置,分享一下吧: 1.窗口-首选项-常规-工作空间,把文本文件编码改为utf8,以后再新建文件就默认是utf ...
- phalcon安装和输出 hello word
1:下载和安装Wampserver2.4-x86.exe 服务器: 2:到phalcon官方网站下载对应的dll文件 phalcon_x86_VC9_php5.4.0_1.2.5 我下的是这个版本 所 ...
- 在Xcode中如何屏蔽某个源文件的编译警告信息
某些时候如果我们的源码在编译过程中出现大量的编译警告时,看起来是挺不爽的:但又确实没办法解决警告问题的时候,我们可以使用下面的方法来屏蔽指定的某个文件的所有警告信息. 1.在Xcode中选中工程文件. ...
- android.support.design.widget.AppBarLayout 在android5.0+底部显示空白条问题
在最外层使用 RelativeLayout作为根节点,同时设置 android:fitsSystemWindows="true"问题解决. <?xml version=&qu ...
- Jzzhu and Chocolate
CF#257 div2 C:http://codeforces.com/contest/450/problem/C 题意:n*m的方格,每次可以横着或者纵向的切一刀,问切k之后,最小的最大是多少. 题 ...
- PYTHON--定期监测服务器端口,并将结果写入MYSQL
定时监测服务器端口,然后将结果入写数据库. 监测用NC命令,入库就用PYTHON的MYSQL模块 再调一个基于函数的多线程... 妥妥的.. 是网上两个功能的合成.. 俺不生产代码,俺只是BAIDU的 ...
- library cache lock
SESSION 34 执行存储过程: SESSION 43 编译存储过程: SESSION 25 删除存储过程: 1.查询查看library cache lock等待事件的相关会话 SQL> s ...