bzoj 1064【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 ;
}
bzoj 1064【noi2008】假面舞会的更多相关文章
- [bzoj 1064][NOI2008]假面舞会(dfs判断环)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1064 分析: 如果a看到b,则a->b 那么: 1.如果图中有环,则说明这个环的 ...
- [BZOJ]1064: [Noi2008]假面舞会
题目大意:n个人,k种假面,每人戴一种,戴第i种的可以看见第i+1种,戴第k种的可以看见第1种,给出m条关系表示一个人可以看到另一个人,问k可能的最大值和最小值.(n<=100,000,m< ...
- BZOJ 1064: [Noi2008]假面舞会(dfs + 图论好题!)
http://www.lydsy.com/JudgeOnline/problem.php?id=1064 题意: 思路: 考虑以下几种情况: ①无环并且是树: 无环的话就是树结构了,树结构的话想一下就 ...
- bzoj 1064 noi2008 假面舞会题解
莫名其妙的变成了我们的noip互测题... 其实这题思想还是比较简单的,只是分类不好分而已 其实就是一个dfs的事 首先,非常明显,原题目中的所有关系可以抽象成一个图(这是...显而易见的吧...) ...
- 【BZOJ】1064: [Noi2008]假面舞会(判环+gcd+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1064 表示想到某一种情况就不敢写下去了.... 就是找环的gcd...好可怕.. 于是膜拜了题解.. ...
- 1064: [Noi2008]假面舞会 - BZOJ
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] ...
- [BZOJ1064][Noi2008]假面舞会
[BZOJ1064][Noi2008]假面舞会 试题描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢 ...
- 【洛谷】1477:[NOI2008]假面舞会【图论】
P1477 [NOI2008]假面舞会 题目描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会. 今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具 ...
随机推荐
- 网上图书商城项目学习笔记-014购物车模块页面javascrip
一.流程分析 二.代码 1.view层 (1)list.jsp <%@ page language="java" import="java.util.*" ...
- Android TabHost 动态修改图标或者动态改变标题
那时客户需要实现在TabHost标题上动态显示从数据库获取的个数.起初这样思考的,从数据库 获取个数是非常简单,但是要把获取的个数显示在TabHost标题,思前想后,想用Handler来异步实现消息传 ...
- uva 11292 Dragon of Loowater (勇者斗恶龙)
Problem C: The Dragon of Loowater Once upon a time, in the Kingdom of Loowater, a minor nuisance tur ...
- easyui datagrid 多表头设置
最近在做二维报表,要求报表的表头自定义.在网上找了好久二维报表的插件,一直找不到合适的.后来就用easyui 中的datagrid替代了一下. 根据实际需求,统计的信息可能不是一个模块中的字段信息,所 ...
- android SharedPreferences apply和commit的区别
1.apply没有返回值而commit返回boolean表明修改是否提交成功2.apply是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而commit是同步的提交到硬件磁盘3.apply ...
- 数据库 MySQL Jdbc JDBC的六个固定步骤
*0 案例: a)在JavaScript中使用正则表达式,在JS中正则表达式的定界符是:// var regexp = /^[0-9]+$/; if(regexp.test(nu ...
- Windows Embedded Compact 2013升级:VS2013也能编译
IT之家(www.ithome.com):Windows Embedded Compact 2013升级:VS2013也能编译 今天,微软为Windows Embedded Compact 2013送 ...
- linux shell 常用基本语法
转自网络,真正来源不详.... 一. Linux基本命令 1.1. cp命令 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,功能十分强大. 语法: cp [选项] 源文件或目录 目标文件或 ...
- poj2352
纪念树状数组初步(……): 这题已经给了y升序,y相同时x升序,(yeah) 所以容易想到O(n^2)的模拟算法: 其实分析一下就是对于当前xi,统计之前有多少个小于等于xi(因为已经保证了没有相同坐 ...
- poj1062
经典的图论建模题: 先拿开的等级问题不看: 每个物品本身的价格就是有一个自定义源点到这个点距离: 有了A物品B物品优惠为W就代表由B到A的有向路权值为W: 最后的最小花费就是源点的点1的最短路径(酋长 ...