[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]假面舞会 题目描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会. 今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具 ...
随机推荐
- 最新 新华网java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.新华网等10家互联网公司的校招Offer,因为某些自身原因最终选择了新华网.6.7月主要是做系统复习.项目复盘.LeetCo ...
- java实现List<People>的排序
1.首先新建测试的实体类(People类): import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsCon ...
- uwp,c#,mediaElement与slider进度条绑定
虽然微软uwp官方已停止对传统媒体控件mediaElement的update,新控件为mediaPlayerElement和mediaPlayer[官方word:https://docs.micros ...
- MySQL之基础认识与操作
MySQL数据库 开发学习中,想满足一些需求,无疑需要经常与数据打交道,例如,我们在使用IO的一些技术的时候,常常需要将一些数据存储到外部文件,可能大家会问,我们初学的时候常常会简单的保存一些数据到 ...
- 【转贴】linux 终端报Message from syslogd
linux 终端报Message from syslogd xiao9873341760人评论8537人阅读2017-03-27 14:19:31 https://blog.51cto.com/xia ...
- JSP和Servlet异常处理转发
<error-page> <!-- 指明异常类型. --> <exception-type>java.lang.ArrayIndexOutOfBoundsExcep ...
- javaweb配置连接mysql数据库
1.首先新建基础连接类BaseDao,在这里配置链接的数据库名称,用户名以及密码,以及执行读与写操作的父方法,代码如下: package com.demo.dao; import java.sql.D ...
- 【转载】SpringBoot-配置发送邮件遇到的一些问题
前言:前一天调用163邮箱发送邮件还么有问题,今天再调用就各种发送不成功,害的我都关闭授权,还花了一毛钱短信费重新开启授权,最后百度到了一篇文章,非常贴切,在此转载下. 本人遇到的错误代码是554,邮 ...
- 【IntelliJ IDEA】添加一个新的tomcat,tomcat启动无法访问欢迎页面,空白页,404
===================================第一部分,添加一个tomcat================================================== ...
- 怎样修改 VS Code 主题?
方法1. 点击左上角 File > Preferences > Color Theme. 方法2. 使用快捷键: Ctrl + K , Ctrl + T PS: 查询各种操作的快捷键可以 ...