题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1064

题意:一年一度的假面舞会又开始了,栋栋也 兴致勃勃的参加了今年的舞会。今年的面具都是主办方特别定制的。每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具。每个面具都有一个编号,主办方会把此编号告诉拿该面具的人。为了使舞会更有神秘感,主办方把面具分为k (k≥3)类,并使用特殊的技术将每个面具的编号标在了面具上,只有戴第i 类面具的人才能看到戴第i+1 类面具的人的编号,戴第k 类面具的人能看到戴第1 类面具的人的编号。 参加舞会的人并不知道有多少类面具,但是栋栋对此却特别好奇,他想自己算出有多少类面具,于是他开始在人群中收集信息。 栋栋收集的信息都是戴第几号面具的人看到了第几号面具的编号。如戴第2号面具的人看到了第5 号面具的编号。栋栋自己也会看到一些编号,他也会根据自己的面具编号把信息补充进去。由于并不是每个人都能记住自己所看到的全部编号,因此,栋栋收集的信 息不能保证其完整性。现在请你计算,按照栋栋目前得到的信息,至多和至少有多少类面具。由于主办方已经声明了k≥3,所以你必须将这条信息也考虑进去。

思路:(1)首先我们假设给出的条件中存在环。那么所有环的长度的最大公约数G即为最多的面具种类;大于等于3且最小的且是G的约数的数即为最少的面具种类;G小于3时无解;

(2)假设不存在环,也就是都是一些有向链,那么所有连通块的最长链之和Sum就是最多的面具种类;3即为最少的面具种类。当然Sum<3时无解。

下面,就是如何求环和最长链。求环就是强连通分量,最长链可以从每个从每个入度为0的点向下计算一次(这里可以记录下从点u开始向下的最长链)。 建图时建成双向边,(x,y,1)和(y,x,-1)。(1)首先找环。我们从任意点开始DFS,每个点记录第一次被遍历时的距离。若下一个是一个已经遍 历过的点v,那么用当前的点u的d[u]更新后的点v的d为p,那么abs(p-d[v])就是环的长度;比如1-2-3-4-1这是环为4;但是对于 1-2-3-4,1-5-4,环的大小为1,得出无解(最后的最大公约数等于1);(2)找最长链。从某点开始DFS,这里记录边是否遍历,每条边及其反 向边只被遍历一次。并且这里也记录d值。这样每个连通分量的最大d值Max和最小d值Min :Max-Min+1就是该连通块的最长链长度。

struct node
{int v,w,next;
};node edges[N<<2];
int head[N];
int e;void Add(int u,int v,int w)
{edges[e].v=v;edges[e].w=w;edges[e].next=head[u];head[u]=e++;
}int d[N];int n,m,visit[N];int Gcd(int x,int y)
{if(!y) return x;return Gcd(y,x%y);
}
int ans;void DFS(int u)
{visit[u]=1;int i,v,w;for(i=head[u];i!=-1;i=edges[i].next){v=edges[i].v;w=edges[i].w;if(visit[v]){ans=Gcd(ans,abs(d[u]+w-d[v]));}else{d[v]=d[u]+w;DFS(v);}}
}int Max,Min;
int h[N];void dfs(int u)
{visit[u]=1;Max=max(Max,d[u]);Min=min(Min,d[u]);int i,v,w;for(i=head[u];i!=-1;i=edges[i].next){v=edges[i].v;w=edges[i].w;if(!h[i]){h[i]=h[i^1]=1;d[v]=d[u]+w;dfs(v);}}
}int main()
{clr(head,-1);RD(n,m);int i,x,y;FOR1(i,m){RD(x,y);Add(x,y,1);Add(y,x,-1);}FOR1(i,n) if(!visit[i]) DFS(i);if(ans){for(i=3;i<=ans;i++) if(ans%i==0) break;if(ans<3) puts("-1 -1");else PR(ans,i);return 0;}clr(visit,0);int ans=0;FOR1(i,n) if(!visit[i]) {Max=Min=d[i]=0;dfs(i);ans+=Max-Min+1;}if(ans<3) puts("-1 -1");else printf("%d %d\n",ans,3);
}

BZOJ 1064 假面舞会(图论-连通分量)相关推荐

  1. BZOJ 1064 假面舞会

    1064: [Noi2008]假面舞会 Time Limit: 10 Sec  Memory Limit: 162 MB Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年 ...

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

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

  3. [BZOJ 1064][NOI 2008]假面舞会(图论+BFS)

    题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=1064 题目大意 给一个有向图染色,一个点的后继的颜色必须全部相同,问最多多少种颜色,最少多 ...

  4. bzoj 1064: [Noi2008]假面舞会(DFS)

    1064: [Noi2008]假面舞会 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2240  Solved: 1083 [Submit][Sta ...

  5. [BZOJ]1064 [NOI2008] 假面舞会 dfs判环

    1064: [Noi2008]假面舞会 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2160  Solved: 1047 [Submit][Sta ...

  6. 【BZOJ 1064】【NOI 2008】假面舞会

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

  7. 1064: [Noi2008]假面舞会

    1064: [Noi2008]假面舞会 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1960  Solved: 941 [Submit][Stat ...

  8. 【图论 搜索】bzoj1064: [Noi2008]假面舞会

    做到最后发现还是读题比赛:不过还是很好的图论题的 Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选 ...

  9. 【NOI2008】假面舞会(图论,搜索)

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

最新文章

  1. 同行评审以权谋私,让投稿人多引用自己文章,爱思唯尔将彻查此事
  2. python字符串input输入_5.print()函数、转义字符、python注释、常量、字符串、格式化输出、input()输入...
  3. 如何在戴尔M系列交换机上配置简单交换模式
  4. UML大战需求分析--阅读笔记02
  5. MySQL:行锁、表锁、乐观锁、悲观锁、读锁、写锁
  6. php 输入值,php-HTML输入值更改
  7. P6672-[清华集训2016]你的生命已如风中残烛【结论】
  8. 支付宝app支付java后台流程、原理分析(含nei wang chuan tou)
  9. 什么样的产品可以成功?
  10. asp.net项目发布打包研究
  11. 让用VS2013编写的程序在XP中顺利运行
  12. 【MTSP】基于matlab遗传算法求解多旅行商问题【含Matlab源码 016期】
  13. 省团团小程序被微信封禁
  14. Unspeakable joy : rejoicing in early modern England【翻译】
  15. 爬梯:MongoDB入门到高级到SpringBoot-API
  16. 互联网上下50年,万字长文推演Web1.0到Web5.0
  17. Spring框架中的单例Beans是线程安全的么
  18. 这是二哈和柯基生下的宝宝?哈撒给,简直太可爱了...
  19. stm32 串口下载(ISP下载)
  20. 机器学习中参数模型和非参数模型理解

热门文章

  1. 第3月第8天 RefCounted PlistBuddy
  2. Tomcat源码学习(一)
  3. 03 Vue进阶extend使用方法详讲
  4. 大学C语言期末考试·选择题·易错点难点总结笔记
  5. 第20届光博会上,我们看到了哪些自动驾驶的“眼睛”?
  6. ceph对接nfs-ganesha 安装配置手顺
  7. 【Zigbee】基础篇(1) Zigbee是什么?Zigbee的介绍及学习?
  8. 3D游戏开发所需的数学基础——笛卡尔坐标系
  9. 前端在旧版浏览器预览PDF文件
  10. 2021年高压电工试题及解析及高压电工实操考试视频