bzoj 1064 假面舞会 图论??+dfs
有两种情况需要考虑
1.链:可以发现对最终的k没有影响
2.环:如果是真环(即1->2->3->4->1),可以看出所有可行解一定是该环的因数
假环呢??(1->2->3->4,1->5->4),可行解便是两条路的差值的因数
So??对于每条边,正建1,反建-1,dfs,每出一个环,就计算gcd
没有环呢??最小是3,最大是所有链加和喽
#include<cstdio>
#include<iostream>
#include<cstring>
#define N 100005
using namespace std;
int Gcd,n,m,e=1,head[N],dep[N],maxn,minn,len;
bool flag[N];
struct edge{
int v,w,next;
}ed[2000500];
int gcd(int x,int y){
return y==0?x:gcd(y,x%y);
}
int abs(int x){
return x>0?x:-x;
}
void add(int u,int v,int w){
ed[e].v=v; ed[e].w=w;
ed[e].next=head[u];
head[u]=e++;
}
void dfs(int x,int k){
flag[x]=1; dep[x]=k;
maxn=max(maxn,k);
minn=min(minn,k);
for(int i=head[x];i;i=ed[i].next){
int v=ed[i].v,w=ed[i].w;
if(!flag[v]) dfs(v,k+w);
else Gcd=gcd(Gcd,abs(dep[v]-k-w));
}
}
int main()
{
int u,v;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d",&u,&v);
add(u,v,1); add(v,u,-1);
}
for(int i=1;i<=n;i++){
if(!flag[i]){
maxn=-0x7fffffff;
minn=0x7fffffff;
dfs(i,1);
len+=maxn-minn+1;
}
}
if(Gcd==0){
if(len<3) printf("-1 -1");
else printf("%d 3\n",len);
}
else{
if(Gcd<3) printf("-1 -1");
else{
int i;
for(i=3;i<=Gcd&&Gcd%i!=0;i++){}
printf("%d %d\n",Gcd,i);
}
}
return 0;
}
bzoj 1064 假面舞会 图论??+dfs的更多相关文章
- BZOJ 1064 假面舞会(NOI2008) DFS判环
此题,回想Sunshinezff学长给我们出的模拟题,原题啊有木有!!此处吐槽Sunshinezff爷出题不人道!! 不过也感谢Sunshinezff学长的帮助,我才能做出来.. 1064: [Noi ...
- BZOJ 1064 假面舞会
http://www.lydsy.com/JudgeOnline/problem.php?id=1064 思路:第一眼看的时候以为是差分约束,但是是做不了的,不过能保证的就是这题绝对是图论题...(废 ...
- 图论 公约数 找环和链 BZOJ [NOI2008 假面舞会]
BZOJ 1064: [Noi2008]假面舞会 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1655 Solved: 798[Submit][S ...
- BZOJ1064 [Noi2008]假面舞会 【dfs】
题目 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具.每个面具都有一个编号,主办方会把此编号告诉拿 ...
- [NOI2008]假面舞会(DFS)
Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具.每个面具都有一个编号,主办 ...
- BZOJ 1064: [Noi2008]假面舞会(dfs + 图论好题!)
http://www.lydsy.com/JudgeOnline/problem.php?id=1064 题意: 思路: 考虑以下几种情况: ①无环并且是树: 无环的话就是树结构了,树结构的话想一下就 ...
- BZOJ1064 NOI2008 假面舞会 图论
传送门 将一组关系\((A,B)\)之间连一条边,那么显然如果图中存在环长为\(len\)的环,那么面具的种数一定是\(len\)的因数. 值得注意的是这里环的关系除了\(A \rightarrow ...
- BZOJ1064 NOI2008假面舞会(dfs树)
将图中的环的长度定义为正向边数量-反向边数量,那么答案一定是所有环的环长的共同因子.dfs一下就能找到图中的一些环,并且图中的所有环的环长都可以由这些环长加加减减得到(好像不太会证).如果有环长为1或 ...
- [NOI2008]假面舞会——数论+dfs找环
原题戳这里 思路 分三种情况讨论: 1.有环 那显然是对于环长取个\(gcd\) 2.有类环 也就是这种情况 1→2→3→4→5→6→7,1→8→9→7 假设第一条链的长度为\(l_1\),第二条为\ ...
随机推荐
- “Location of the Android SDK has not been set up in the preferences”问题的解决
方法来源:http://stackoverflow.com/questions/5894929/location-of-the-Android-sdk-has-not-been-setup-in-th ...
- 从有值的ID到汉字编码
前些日子漫无目的地刷着朋友圈,突然一个ID从字丛中闯入我的眼睛--"某&字"(为保护当事人隐私,此处用'某''字'代替),浸淫于计算机而产生的直觉告诉我,这是一个有值的表达 ...
- Lintcode400 Maximum Gap solution 题解
[题目描述] Given an unsorted array, find the maximum difference between the successive elements in its s ...
- System.Drawing.image 与ImageSource 互转
private BitmapSource bs(Bitmap bt) { IntPtr ip = bt.GetHbitmap(); BitmapSource bitmapSource = System ...
- Python3实现ICMP远控后门(上)_补充篇
ICMP后门(上)补充篇 前言 在上一篇文章Python3实现ICMP远控后门(上)中,我简要讲解了ICMP协议,以及实现了一个简单的ping功能,在文章发表之后,后台很多朋友留言,说对校验和的计算不 ...
- HTML学习笔记6:列表标签
列表标签 什么是列表标签呢? 以平台区分有什么游戏? 手游 pc游戏 家用机游戏 掌机游戏 以游戏类型区分有什么游戏? RPG ARPG MMORPG ACT FPS 以上两种就是一种列表标签 ...
- ubantu和虚拟机tools 安装 小问题集结
一.虚拟机 就安装虚拟机而言,个人觉得还是比较简易的,毕竟VMware workstation pro 是一个开源的软件,只要在网上搜索即可,这里我提供一个虚拟机的资源: 链接:http://pan. ...
- Linux Ubuntu 16.04 初次安装使用总结zzz
装了两天的ubuntu系统终于算是勉强能用了,来来回回装了有三四次,期间出了各种各样的毛病.但是还是被我的Google大法给治好了.为了装这个系统,算是耗了两天的时间,啥事情都没干,干耗在这上面了.所 ...
- JDK安装遇见的问题及解决方案
问题描述: Jdk安装完成后从新启动电脑,打开eclipse报找 不到JRE或JDK,在cmd中输入 java -version 也不显示JDK信息. 后把JDK配置的环境变量path的JAVA_H ...
- java里的堆内存于栈内存的区别
这个区别对于我们来说并不大,这是内存分配的两种方法.一般代码逻辑,简单变量,结构体都是放入栈中,而对象,以及被装箱的数据是放入堆中的.简单来说,栈就是一个很长的栈(数据结构中的栈,如果不理解可以当做是 ...