BZOJ 1064 假面舞会
http://www.lydsy.com/JudgeOnline/problem.php?id=1064
思路:第一眼看的时候以为是差分约束,但是是做不了的,不过能保证的就是这题绝对是图论题。。。(废话)
分联通块考虑,如果每个联通块都是没有有向环的话,那么各个联通块中,最长链就是最大答案,3就是最小答案。
只要有一个联通块有环,那么答案一定是这个环长度的因数,最大答案,就是这些环长度的gcd
不过,要是有这个非正常的环怎么办?

我们可以看到,4->3和2->3都指向了3,这怎么办?那么我们只要在一开始建图的时候,原来的有向边权值为1,再同时建一个反向边权值为-1,把有向图变成无向图。
为什么?,因为如图,4可以到3,2也可以到3,说明2的编号和4相同,所以2->3->4的路径实际上是"走出去一步,又走回来一步",也就是我常说的"有来有回",按照我们刚才的建图方式,这个环的长度就是:1+1+1+1-1=3,事实上,答案也是如此,3和5编号相同,2和4编号相同,这样图中实际上是只有3种面具。
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
int tot,go[],next[],first[];
int c[],dis[],vis[],n,m,len,val[];
int read(){
int t=,f=;char ch=getchar();
while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
return t*f;
}
void insert(int x,int y,int z){
tot++;
go[tot]=y;
next[tot]=first[x];
first[x]=tot;
val[tot]=z;
}
void add(int x,int y){
insert(x,y,);insert(y,x,-);
}
int gcd(int a,int b){
if (b==) return a;
else return gcd(b,a%b);
}
int bfs(int x){
int h=,t=;c[]=x;vis[x]=;dis[x]=;
int mxdis=,mndis=;
while (h<=t){
int now=c[h++];
for (int i=first[now];i;i=next[i]){
int pur=go[i];
if (vis[pur]){
len=gcd(len,val[i]+dis[now]-dis[pur]);
continue;
}
vis[pur]=;
c[++t]=pur;
dis[pur]=dis[now]+val[i];
mxdis=std::max(mxdis,dis[pur]);
mndis=std::min(mndis,dis[pur]);
}
}
return mxdis-mndis+;
}
int main(){
n=read();m=read();
for (int i=;i<=m;i++){
int x=read(),y=read();
add(x,y);
}
int sum=;
for (int i=;i<=n;i++)
if (!vis[i]) sum+=bfs(i);
len=std::abs(len);
if (len){
if (len<) {
printf("-1 -1\n");
return ;
}
printf("%d ",len);
for (int i=;i<=len;i++)
if (len%i==) {
printf("%d\n",i);
break;
}
return ;
}else
if (sum<){
printf("-1 -1\n");
return ;
}else{
printf("%d 3\n",sum);
return ;
}
}
BZOJ 1064 假面舞会的更多相关文章
- BZOJ 1064 假面舞会(NOI2008) DFS判环
此题,回想Sunshinezff学长给我们出的模拟题,原题啊有木有!!此处吐槽Sunshinezff爷出题不人道!! 不过也感谢Sunshinezff学长的帮助,我才能做出来.. 1064: [Noi ...
- bzoj 1064 假面舞会 图论??+dfs
有两种情况需要考虑 1.链:可以发现对最终的k没有影响 2.环:如果是真环(即1->2->3->4->1),可以看出所有可行解一定是该环的因数 假环呢??(1->2-&g ...
- 图论 公约数 找环和链 BZOJ [NOI2008 假面舞会]
BZOJ 1064: [Noi2008]假面舞会 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1655 Solved: 798[Submit][S ...
- 【BZOJ】1064: [Noi2008]假面舞会(判环+gcd+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1064 表示想到某一种情况就不敢写下去了.... 就是找环的gcd...好可怕.. 于是膜拜了题解.. ...
- 1064: [Noi2008]假面舞会 - BZOJ
Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具.每个面具都有一个编号,主办 ...
- NOI2008假面舞会
1064: [Noi2008]假面舞会 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 883 Solved: 462[Submit][Status] ...
- [BZOJ1064][Noi2008]假面舞会
[BZOJ1064][Noi2008]假面舞会 试题描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢 ...
- Codevs 1800 假面舞会 2008年NOI全国竞赛
1800 假面舞会 2008年NOI全国竞赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 一年一度的假面舞会又开始了,栋栋也 ...
- [补档][NOI 2008]假面舞会
[NOI 2008]假面舞会 题目 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一个自己喜欢的面具. 每个面具都有一 ...
随机推荐
- Java BufferedWriter与BufferedReader操作文本文件
/** * 采用字符流读取写入文本文件 */ public class FileUtil { /** * 写文件 * @param fileName * @param content */ publi ...
- php将会话保存在数据库里
php默认把会话保存在临时文件中,保存在数据库中可以提高安全性,在共享主机服务器上,所有web站点都使用同一个临时目录,这意味着数十个程序都在同一位置进行文件读取的操作,我们很容易就编写一个脚本从这个 ...
- Android 图片合成:添加蒙板效果 不规则相框 透明度渐变效果的实现
Android 图片合成:添加蒙板效果 不规则相框 透明度渐变效果的实现 暂时还未有时间开发这效果,所以先贴出来. 先贴一张效果图,这是一张手机截屏: 左上方的风景图:背景图片 右上方的人物图:前景图 ...
- IT技术如何转向销售创业
广州 IT 网友 14:14:10 本人本科软件工程毕业,现在在一家公司做开发(不是很技术的那种),工作接近两年感觉自 己不适合这个行业,想换销售行业,不愿意在做技术.打算从事本行业的销售,老师给点 ...
- PHP foreach()跳出本次或当前循环与终止循环方法
PHPforeach()跳出本次或当前循环与终止循环方法 PHP中用foreach()循环中,想要在循环的时候,当满足某个条件时,想 $arr = array('a','b','c','d','e') ...
- C#关闭显示屏,使显示屏处于待机状态
class Program { private const uint WM_SYSCOMMAND = 0x112; //系统消息 private const int SC_MONITORPOWER = ...
- hbase单机安装
1.网上内容比较混乱,其实安装单机hbase只需要安装hbase即可 2.把hbase-0.xxx.tart.gz 拷贝到/opt/hbase文件及下(这是安装目录,可自定义) 2.1 tar xfz ...
- Guava源码分析——ServiceManager
ServiceManager类: 用于监控服务集的管理器,该类提供了诸如startAsync.stopAsync.servicesByState方法来运行.结束和检查服务集,而且,通过监听器 ...
- 划分树 poj2104 hdu5249
KPI Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- [置顶] 创建GitHub技术博客全攻略
[置顶] 创建GitHub技术博客全攻略 分类: GitHub2014-07-12 13:10 19710人阅读 评论(21) 收藏 举报 githubio技术博客网站生成 说明: 首先,你需要注册一 ...