1064: [Noi2008]假面舞会

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 2160  Solved: 1047
[Submit][Status][Discuss]

Description

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

Input

第一行包含两个整数n, m,用一个空格分隔,n 表示主办方总共准备了多少个面具,m 表示栋栋收集了多少条信息。接下来m 行,每行为两个用空格分开的整数a, b,表示戴第a 号面具的人看到了第b 号面具的编号。相同的数对a, b 在输入文件中可能出现多次。

Output

包含两个数,第一个数为最大可能的面具类数,第二个数为最小可能的面具类数。如果无法将所有的面具分为至少3 类,使得这些信息都满足,则认为栋栋收集的信息有错误,输出两个-1。

Sample Input

【输入样例一】

6 5
1 2
2 3
3 4
4 1
3 5

【输入样例二】

3 3
1 2
2 1
2 3

Sample Output

【输出样例一】
4 4

【输出样例二】
-1 -1

HINT

100%的数据,满足n ≤ 100000, m ≤ 1000000。

Source

[Submit][Status][Discuss] 

HOME Back

题解:Click

#include<stdio.h>
#include<cmath>
#include<cstring>
#include<algorithm>
#define clear(a) memset(a, 0, sizeof(a))
using namespace std;
const int maxn = 200005;
int ans, n, m, num(1), mx, mn;
bool vis[maxn], mark[maxn * 20];
int dis[maxn], h[maxn];
struct edge{ int nxt, v, w;}e[maxn * 20];
inline void add(int u, int v, int w){e[++num].v = v, e[num].nxt= h[u], e[num].w = w, h[u] = num;
}
int gcd(int a, int b){return (!b) ? a : gcd(b, a % b);
}
void dfs_chain(int u){mx = max(mx, dis[u]);mn = min(mn, dis[u]);vis[u] = true;for(int i = h[u]; i; i = e[i].nxt)if(!mark[i]){mark[i] = mark[i ^ 1] = true;int v = e[i].v;dis[v] = dis[u] + e[i].w, dfs_chain(v);}
}
void dfs_cir(int u){vis[u] = true;for(int i = h[u]; i; i = e[i].nxt){int v = e[i].v;if(vis[v]) ans = gcd(ans, abs(dis[u] + e[i].w - dis[v]));else dis[v] = dis[u] + e[i].w, dfs_cir(v);}
}
int main(){scanf("%d%d", &n, &m);for(int i = 1; i <= m; ++i){int x, y;scanf("%d%d", &x, &y);add(x, y, +1), add(y, x, -1);}for(int i = 1; i <= n; ++i)if(!vis[i]) dfs_cir(i);if(ans){if(ans < 3) puts("-1 -1");else{for(int i = 3; i <= ans; ++i)if(!(ans % i)){printf("%d %d\n", ans, i);break;}}return 0;}clear(vis);for(int i = 1; i <= n; ++i)if(!vis[i]){mx = mn = dis[i] = 0;dfs_chain(i);ans += mx - mn + 1;}if(ans < 3) puts("-1 -1");else printf("%d %d\n", ans, 3);return 0;
}

[BZOJ]1064 [NOI2008] 假面舞会 dfs判环相关推荐

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

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

  2. bzoj 1064 noi2008 假面舞会题解

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

  3. 1064: [Noi2008]假面舞会

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

  4. 【BZOJ1064】[Noi2008]假面舞会 DFS树

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

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

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

  6. [Noi2008]假面舞会(dfs判环)

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

  7. 【做题记录】[NOI2008] 假面舞会—有向图上的环与最长链

    luogu 1477 [NOI2008] 假面舞会 容易发现: 如果图中没有环,那么面具种数一定是所有联通块内最长链之和,最少为 \(3\) . 如果有环,则面具种数一定是所有环的大小的最大公约数. ...

  8. hdu 3560(dfs判环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3560 思路:dfs判环,这里成环的条件是环中的每个点的出度和入度都为1,因此dfs的时候只须判断的相连 ...

  9. Codeforces Round #836 (Div. 2) E.Tick, Tock(在线:带权并查集/离线:dfs判环)

    题目 n*m(1<=n,m<=2e5,n*m<=2e5)的网格图, 有一些格子内已经放入了闹钟,当前时刻在[0,h)(1<=h<=1e9)之间 还有一些位置没有放闹钟,输 ...

最新文章

  1. java基础(参数传递)
  2. 第四章 PX4-Pixhawk-MPU6000传感器驱动解析
  3. 论文浅尝 | 基于属性嵌入的知识图谱实体对齐
  4. “~/” 代表应用程序根目录的一点误区
  5. 2018-2019-2 20165234 《网络对抗技术》 Exp1 PC平台逆向破解
  6. html中不支持什么元素,HTML中不支持静态Expando的元素的问题
  7. 标签布局Tab与TabHost详细教程
  8. 【小小小白进行手机进行刷机测试 Ubuntu系统下安装adb工具、fastboot工具】
  9. 分享一个我做的记账系统(网站)
  10. zzulioj 1000: 从今天开始入坑C语言
  11. 252个基本词根详解
  12. 电子墨水屏技术原理介绍
  13. 一篇散文简单的了解Redis
  14. 洲际酒店集团加速布局西部世界,全力打造高品质中国山地旅游
  15. 国产android智能手表,国产安卓手机越来越骚了 这回连手表都用上了
  16. openFrameworks实现的简单坦克对战游戏-Tank War
  17. 数据分析统计知识—描述性统计
  18. Styles.Rende @Scripts.Render 错误
  19. ISP——LSC(Lens Shading Correction)
  20. cmake导入so库_通过CMake方式生成动态库so文件

热门文章

  1. 免屏实现精准较时设定,WT588F02B-8S(C006_03)电子语音药盒解决方案
  2. win10推送_微软 Win10 最稳版本 2004 正式版推送!最低配置要求汇总,全新 UI 虚拟桌面,支持几乎所有 CPU...
  3. c语言中按键设置上下限,控制图中的控制上限和控制下限标明()。A.客户将要接受的界限B.可能出现的过程的偏差范围C.可以接受 - 信管网...
  4. 分布式认知工业互联网如何赋能工业企业数字化转型?
  5. 网间进程的标识和端口分配机制
  6. linux 安装字体 注册表,如何安装字体,如何安装字体?
  7. 4G无线模块 电力通信模块
  8. 电路板故障测试仪GR4080软件,电路板维修测试仪是一种的电路板故障检测设备
  9. 《那些年我们追过的Wrox精品红皮计算机图书》有奖活动
  10. Email和电子邮箱一样吗?