bzoj1064【Noi2008】假面舞会
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1064
给一个有向图染色,每个点的后继必须相同,问至少&至多有多少种染色方案
sol: 图由多个联通块组成,对于每个联通块,考虑以下3种情况:
如果有环,分为3类讨论
对于第一种简单环,答案一定是环长的约数
对于第二种有反向边的环,答案一定是两条链长差的约数
trick:将有向边化为无向边,正向边权为1,反向为-1
这样1,2可以一起做
对于第三种大环套小环,将小环缩点即可(gcd(a,b)=gcd(b,a-b))
所以答案最大为所有环长的gcd,最小为gcd的约数中>3的最小的一个
如果是一个森林
则答案最大值为深度之差的最大值,最小值为3
若最大值<3则无解
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=;
const int M=;
int n,m,tot,maxn,minn,ansmin,ansmax;
int dis[N],head[N],vis[N],ver[M],nxt[M],edge[M];
void add(int u,int v,int d)
{
tot++;
nxt[tot]=head[u];
ver[tot]=v;
edge[tot]=d;
head[u]=tot;
}
int gcd(int x,int y)
{
if(!y) return x;
return gcd(y,x%y);
}
void dfs1(int x,int fa)//找环
{
vis[x]=;
for(int i=head[x];i;i=nxt[i])
{
int v=ver[i];
if(v!=fa)
{
if(!vis[v])vis[v]=,dis[v]=dis[x]+edge[i],dfs1(v,x);
else ansmax=gcd(ansmax,abs(dis[x]-dis[v]+edge[i]));
}
}
}
void dfs2(int x,int fa)//处理森林
{
vis[x]=;
maxn=max(dis[x],maxn);
minn=min(minn,dis[x]);
for(int i=head[x];i;i=nxt[i])
{
int v=ver[i];
if(v!=fa)
if(!vis[v])
vis[v]=,dis[v]=dis[x]+edge[i],dfs2(v,x);
}
}
int main()
{
scanf("%d%d",&n,&m);
while(m--)
{
int a,b; scanf("%d%d",&a,&b);
add(a,b,); add(b,a,-);
}
for(int i=;i<=n;i++) if(!vis[i]) dfs1(i,);
if(ansmax) for(ansmin=;ansmin<=ansmax&&ansmax%ansmin;ansmin++);
else
{
ansmin=;memset(vis,,sizeof(vis));
for(int i=;i<=n;i++)
if(!vis[i])
{
maxn=minn=,dis[i]=;
dfs2(i,);ansmax+=maxn-minn+;
}
}
if(ansmax<=) ansmax=ansmin=-;
printf("%d %d\n",ansmax,ansmin);
return ;
}
bzoj1064【Noi2008】假面舞会的更多相关文章
- [BZOJ1064][Noi2008]假面舞会
[BZOJ1064][Noi2008]假面舞会 试题描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢 ...
- BZOJ1064 [Noi2008]假面舞会 【dfs】
题目 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具.每个面具都有一个编号,主办方会把此编号告诉拿 ...
- 【图论 搜索】bzoj1064: [Noi2008]假面舞会
做到最后发现还是读题比赛:不过还是很好的图论题的 Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选 ...
- BZOJ1064 NOI2008假面舞会(dfs树)
将图中的环的长度定义为正向边数量-反向边数量,那么答案一定是所有环的环长的共同因子.dfs一下就能找到图中的一些环,并且图中的所有环的环长都可以由这些环长加加减减得到(好像不太会证).如果有环长为1或 ...
- BZOJ1064 NOI2008 假面舞会 图论
传送门 将一组关系\((A,B)\)之间连一条边,那么显然如果图中存在环长为\(len\)的环,那么面具的种数一定是\(len\)的因数. 值得注意的是这里环的关系除了\(A \rightarrow ...
- BZOJ1064 NOI2008假面舞会
挺神的这题,发现只有环和链两种情况 搜索时我们只考虑环的,因为链可以看成找不到分类的环. 当成链时大小是的最大值是各链长的和,最小值是3 当成环时最大值是各环长的gcd,最小值是大于3的最小的ans的 ...
- 【BZOJ1064】[Noi2008]假面舞会 DFS树
[BZOJ1064][Noi2008]假面舞会 Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择 ...
- 图论 公约数 找环和链 BZOJ [NOI2008 假面舞会]
BZOJ 1064: [Noi2008]假面舞会 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1655 Solved: 798[Submit][S ...
- NOI2008假面舞会
1064: [Noi2008]假面舞会 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 883 Solved: 462[Submit][Status] ...
- 【洛谷】1477:[NOI2008]假面舞会【图论】
P1477 [NOI2008]假面舞会 题目描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会. 今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具 ...
随机推荐
- LightOJ 1422 Halloween Costumes (区间DP,经典)
题意: 有个人要去参加万圣节趴,但是每到一个趴都要换上特定的服装,给定一个序列表示此人要穿的衣服编号(有先后顺序的),他可以套很多件衣服在身上,但此人不喜欢再穿那些脱下的衣服(即脱下后就必须换新的), ...
- 使用JavaScript调用手机平台上的原生API
我之前曾经写过一篇文章使用Cordova将您的前端JavaScript应用打包成手机原生应用,介绍了如何使用Cordova框架将您的用JavaScript和HTML开发的前端应用打包成某个手机平台(比 ...
- PCL点云处理可视化——法向显示错误“no override found for vtk actor”解决方法
转:https://blog.csdn.net/bflong/article/details/79137692 参照:https://blog.csdn.net/imsaws/article/deta ...
- 从汇编看c++中临时对象的析构时机
http://www.cnblogs.com/chaoguo1234/archive/2013/05/12/3074425.html c++中,临时对象一旦不需要,就会调用析构函数,释放其占有的资源: ...
- ucosii(2.89)semaphore 应用要点
semaphore 的作用:1,允许一个任务与其他任务(中断)同步.2,取得共享资源使用权.3,标志事件的发生.
- 屏蔽系统的Ctrl+c/x/v操作
实现效果: 知识运用: KeyEventArgs类的Control, public bool Control {get;} //获取一个值 该值指示是否曾按下Ctrl键 KeyCode和Handled ...
- 2017年网络空间安全技术大赛部分writeup
作为一个bin小子,这次一个bin都没做出来,我很羞愧. 0x00 拯救鲁班七号 具体操作不多说,直接进入反编译源码阶段 可以看到,只要2处的str等于a就可以了,而str是由1处的checkPass ...
- ios之UIButoon
第一.UIButton的定义 UIButton *button=[[UIButton buttonWithType:(UIButtonType); 能够定义的button类型有以下6种, typede ...
- HTML5开发手机应用--viewport的作用--20150216
在用HTML5开发手机应用或手机网页时,<head>部分总会有如下一段代码,这段代码到底什么意思呢.在网上,大家会得到很多答案.我从网上搜集了部分介绍,整理一下,以留备用. <met ...
- vue-cli3.0 生产包去除console.log
目前负责的公众号又迭代了一个版本,之前打生产包,配置总是和测试包搞混,所以使用了vue-cli3.0的环境变量来控制配置. 但是又发现了一个新问题,写代码的过程中写了很多console.log 来调试 ...