题目大意:n个人,k种假面,每人戴一种,戴第i种的可以看见第i+1种,戴第k种的可以看见第1种,给出m条关系表示一个人可以看到另一个人,问k可能的最大值和最小值。(n<=100,000,m<=1,000,000)

思路:染色,若点i颜色为ci,就把点i能到的点染成ci+1,能到点i的点染成ci-1,如果染之前已经染过了,设要染的点为j,则cj和ci+1(-1)模k同余,若cj不等于ci+1(-1),则k必然为|ci+1(-1)-cj|的因子,取gcd即可。若没有出现这种情况,最大答案为各连通块最长链的和。(稍微卡了个常卡到rank1 233)

#include<cstdio>
#include<algorithm>
using namespace std;
char B[<<],*S=B,C;int X;
inline int read()
{
while((C=*S++)<''||C>'');
for(X=C-'';(C=*S++)>=''&&C<='';)X=(X<<)+(X<<)+C-'';
return X;
}
#define r register int
#define MN 100000
#define MM 1000000
struct edge{int nx,t;}e[MM*+];
int h[MN+],rh[MN+],en,c[MN+],ans,mn,mx;
inline void ins(int*h,int x,int y){e[++en]=(edge){h[x],y};h[x]=en;}
inline int gcd(int x,int y){return y?gcd(y,x%y):x;}
inline int z(int x){return x<?-x:x;}
void dfs(int x)
{
for(r i=h[x];i;i=e[i].nx)
c[e[i].t]?ans=gcd(ans,z(c[e[i].t]-c[x]-)):
(mx=max(mx,c[e[i].t]=c[x]+),dfs(e[i].t),);
for(r i=rh[x];i;i=e[i].nx)
c[e[i].t]?ans=gcd(ans,z(c[e[i].t]-c[x]+)):
(mn=min(mn,c[e[i].t]=c[x]-),dfs(e[i].t),);
}
int main()
{
fread(B,,<<,stdin);
int n,m,x,y,i,s=;
n=read();m=read();
while(m--)x=read(),ins(h,x,y=read()),ins(rh,y,x);
for(i=;i<=n;++i)if(!c[i])c[i]=mn=mx=n,dfs(i),s+=mx-mn+;
if(ans)
{
if(ans<)return *puts("-1 -1");
for(i=;i<=ans;++i)if(ans%i==)break;
return *printf("%d %d\n",ans,i);
}
printf("%d %d\n",s<?-:s,s<?-:);
}

[BZOJ]1064: [Noi2008]假面舞会的更多相关文章

  1. [bzoj 1064][NOI2008]假面舞会(dfs判断环)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1064 分析: 如果a看到b,则a->b 那么: 1.如果图中有环,则说明这个环的 ...

  2. BZOJ 1064: [Noi2008]假面舞会(dfs + 图论好题!)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1064 题意: 思路: 考虑以下几种情况: ①无环并且是树: 无环的话就是树结构了,树结构的话想一下就 ...

  3. bzoj 1064 noi2008 假面舞会题解

    莫名其妙的变成了我们的noip互测题... 其实这题思想还是比较简单的,只是分类不好分而已 其实就是一个dfs的事 首先,非常明显,原题目中的所有关系可以抽象成一个图(这是...显而易见的吧...) ...

  4. 【BZOJ】1064: [Noi2008]假面舞会(判环+gcd+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1064 表示想到某一种情况就不敢写下去了.... 就是找环的gcd...好可怕.. 于是膜拜了题解.. ...

  5. 1064: [Noi2008]假面舞会 - BZOJ

    Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具.每个面具都有一个编号,主办 ...

  6. 图论 公约数 找环和链 BZOJ [NOI2008 假面舞会]

    BZOJ 1064: [Noi2008]假面舞会 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1655  Solved: 798[Submit][S ...

  7. NOI2008假面舞会

    1064: [Noi2008]假面舞会 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 883  Solved: 462[Submit][Status] ...

  8. [BZOJ1064][Noi2008]假面舞会

    [BZOJ1064][Noi2008]假面舞会 试题描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢 ...

  9. 【洛谷】1477:[NOI2008]假面舞会【图论】

    P1477 [NOI2008]假面舞会 题目描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会. 今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具 ...

随机推荐

  1. Android开发简易教程

    Android开发简易教程 Android 开发因为涉及到代码编辑.UI 布局.打包等工序,有一款好用的IDE非常重要.Google 最早提供了基于 Eclipse 的 ADT 作为开发工具,后来在2 ...

  2. 团队作业7——Beta版本冲刺计划及安排

    上一个阶段的总结: 在Alpha阶段,我们小组已近完成了大部分的功能要求,小组的每一个成员都发挥了自己的用处.经过了这么久的磨合,小组的成员之间越来越默契,相信在接下来的合作中,我们的开发速度会越来越 ...

  3. 创建带缩进的XML

    from xml.etree import ElementTree as ET from xml.dom import minidom root = ET.Element('}) son=ET.Sub ...

  4. Linux 帳號管理與 ACL 權限設定

    1. Linux 的账号与群组1.1 使用者识别: UID 与 GID1.2 使用者账号:/etc/passwd, /etc/shadow1.3 关于群组: 有效与初始群组. groups, newg ...

  5. react基础篇入门组件

    讲述一下React: 1.声明式设计-React采用声明范式,可以轻松描述应用 2.高效-React通过DOM模型,最大限度的减少dom的交互 3.灵活-React可以与已知的库或框架很好的配合 4. ...

  6. Css之导航栏学习

    Css: ul { list-style-type:none; margin:; padding:; overflow:hidden; background-color:blue; /*固定在顶部*/ ...

  7. kali使用

    1.kali安装后安装vmtools ①.vim /etc/apt/sources.list 添加中科大滚动版更新源 deb http://mirrors.ustc.edu.cn/kali kali- ...

  8. markdown最基本的几种语法

    1.标题 # 相当于<h1></h1> ## 相当于<h2></h2> ### 相当于<h3></h3> #### 相当于< ...

  9. 从PRISM开始学WPF(九)交互(完结)

    0x07交互 Notification xaml: <Window x:Class="UsingPopupWindowAction.Views.MainWindow" xml ...

  10. Python内置函数(39)——help

    英文文档: help([object]) Invoke the built-in help system. (This function is intended for interactive use ...