[NOI2008]假面舞会——数论+dfs找环
思路
分三种情况讨论:
1.有环
那显然是对于环长取个\(gcd\)
2.有类环
也就是这种情况
1→2→3→4→5→6→7,1→8→9→7
假设第一条链的长度为\(l_1\),第二条为\(l_2\),那么\(l_1\)和\(l_2\)需要满足\(l_1\equiv l_2(mod\ k)\),也就是\(k|(l_1-l_2)\)。如果我们建权值为\(-1\)的反向边的话,找出来的环就涵盖了这种情况,并且取\(gcd\)就能满足等式
3.有链
对答案无影响
最后还需要加一个特判,就是只有链的情况
具体可以看代码
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <string>
#include <vector>
#include <cmath>
#include <ctime>
#include <queue>
#include <map>
#include <set>
using namespace std;
#define IINF 0x3f3f3f3f3f3f3f3fLL
#define ull unsigned long long
#define pii pair<int, int>
#define uint unsigned int
#define mii map<int, int>
#define lbd lower_bound
#define ubd upper_bound
#define INF 0x3f3f3f3f
#define vi vector<int>
#define ll long long
#define mp make_pair
#define pb push_back
#define N 100000
#define M 1000000
struct Edge {
int next, to, w;
}e[2*M+5];
int n, m, maxans, minans;
int fa[N+5], head[N+5], eid, vis[N+5], d[N+5];
int mmax[N+5], mmin[N+5];
int find(int x) {
return fa[x] == x ? x : fa[x] = find(fa[x]);
}
int gcd(int a, int b) {
return !b ? a : gcd(b, a%b);
}
void addEdge(int from, int to, int w) {
e[++eid].next = head[from];
e[eid].to = to;
e[eid].w = w;
head[from] = eid;
}
void dfs(int u, int x) {
if(vis[u]) {
maxans = gcd(abs(x-d[u]), maxans);
return ;
}
vis[u] = 1;
mmin[find(u)] = min(mmin[find(u)], x);
mmax[find(u)] = max(mmax[find(u)], x);
d[u] = x;
for(int i = head[u]; i; i = e[i].next) {
int v = e[i].to, w = e[i].w;
dfs(v, x+w);
}
}
int main() {
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++i) fa[i] = i;
for(int i = 1, x, y; i <= m; ++i) {
scanf("%d%d", &x, &y);
addEdge(x, y, 1), addEdge(y, x, -1);
int fx = find(x), fy = find(y);
if(fx != fy) fa[fy] = fx;
}
memset(mmin, 0x3f, sizeof mmin);
for(int i = 1; i <= n; ++i) {
if(vis[i]) continue;
dfs(i, 0);
}
for(int i = 3; i <= maxans; ++i) {
if(maxans%i == 0) {
minans = i;
break;
}
}
if(!maxans)
for(int i = 1; i <= n; ++i)
if(find(i) == i)
maxans += mmax[i]-mmin[i]+1;
if(!minans) minans = 3;
if(maxans < 3) printf("-1 -1\n");
else printf("%d %d\n", maxans, minans);
return 0;
}
[NOI2008]假面舞会——数论+dfs找环的更多相关文章
- [NOI2008]假面舞会(DFS)
Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具.每个面具都有一个编号,主办 ...
- BZOJ1064 [Noi2008]假面舞会 【dfs】
题目 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具.每个面具都有一个编号,主办方会把此编号告诉拿 ...
- BZOJ1064 NOI2008假面舞会(dfs树)
将图中的环的长度定义为正向边数量-反向边数量,那么答案一定是所有环的环长的共同因子.dfs一下就能找到图中的一些环,并且图中的所有环的环长都可以由这些环长加加减减得到(好像不太会证).如果有环长为1或 ...
- BZOJ 1064: [Noi2008]假面舞会(dfs + 图论好题!)
http://www.lydsy.com/JudgeOnline/problem.php?id=1064 题意: 思路: 考虑以下几种情况: ①无环并且是树: 无环的话就是树结构了,树结构的话想一下就 ...
- 图论 公约数 找环和链 BZOJ [NOI2008 假面舞会]
BZOJ 1064: [Noi2008]假面舞会 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1655 Solved: 798[Submit][S ...
- 【BZOJ1064】[Noi2008]假面舞会 DFS树
[BZOJ1064][Noi2008]假面舞会 Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择 ...
- [BZOJ1064][Noi2008]假面舞会
[BZOJ1064][Noi2008]假面舞会 试题描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢 ...
- NOI2008假面舞会
1064: [Noi2008]假面舞会 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 883 Solved: 462[Submit][Status] ...
- 【洛谷】1477:[NOI2008]假面舞会【图论】
P1477 [NOI2008]假面舞会 题目描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会. 今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具 ...
随机推荐
- Js 集合运用
1.给定一个单词good 要求输入 g1 o2 d1 (字母+加字母个数) 方法一: <script type="text/javascript"> var arrO ...
- Java模版引擎之Freemarker
Java模版引擎之Freemarker freemarker是一款模版引擎,是一种基于模版生成静态文件的通用工具,它是为Java程序员提供的一个类库,它不是面向最终用户的,而是为程序员提供了一款可以嵌 ...
- 记录一次线上yarn RM频繁切换的故障
周末一大早被报警惊醒,rm频繁切换 急急忙忙排查 看到两处错误日志 错误信息1 ervation <memory:0, vCores:0> 2019-12-21 11:51:57,781 ...
- 【AtCoder】ARC061
ARC061 C - たくさんの数式 / Many Formulas 这个其实\(10^5\)也能做.. 就是\(dp[i]\)表示到第i位的方案数,\(sum[i]\)表示延伸到第i位之前的所有方案 ...
- python以不同方式打印输出九九乘法表
参考:http://www.cnblogs.com/suiy-160428/p/5594389.htmlpython输出 9*9 乘法口诀表 矩形输出九九乘法表: for i in range(1,1 ...
- Flask 卡住, 无响应问题
自己学习Flask+Gevent, 做了一个小接口服务器, 但在收到请求后, 打印请求的报文, 并返回正确格式, 运行后会出现收到请求消息后,Flask卡住无响应的的问题, 有时候点击ctrl+C才能 ...
- 怎样禁用浏览器的Cookie功能
使用: window.navigator.cookieEnabled; window.navigator.cookieEnabled = true; 这样设置以后, 浏览器就不会接受和保存服务器传过来 ...
- AngularJS-01.AngularJS,Module,Controller,scope
1.AngularJS 一个构建动态Web应用程序的结构化框架. 基于JavaScript的MVC框架.( MVC ---- Model(模型).View(视图).Controller(控制器) ) ...
- 又谈F分布
今天看到一篇不错的博文,有感,记录下来,相对来说讲到了本质,也很容易理解.https://www.cnblogs.com/think-and-do/p/6509239.html 首先,老生常谈,还是那 ...
- 13 Msql之四种事务隔离界别
一.事务的基本要素 1.原子性:事务开始后的所有操作,要么全部做完,要么全部不做,不能停滞在中间环节.事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没发生一样.也就是说事务是一个不可分割 ...