坑死了......

题意:给你个有向图,你需要把点分成k种,满足每条边都是分层的(从i种点连向i + 1种点,从k连向1)。

要确保每种点至少有一个。

求k的最大值,最小值。

n <= 1e5, m <= 1e6, k >= 3。

解:

首先可以发现,如果存在一个环,那么k一定是环长的约数。

然后我们把所有环长的gcd求出来就行了......

考虑这几种情况:

情况①:

这启示我们要拓扑排序或建反向边。鉴于这个图可能有环,我们建长度为-1的反向边。

情况②:

这个红色的环怎么办?

事实上只要别的两个环满足了,这个组合起来的环也能够被满足(意会一下)。

情况⑨:

这启示我们在无环/环长全部为0的时候进行特殊处理。

然后写代码的时候出了一堆错......50分暴力发现比正解还难打,不会写......

 #include <cstdio>
#include <algorithm>
#include <cstring> const int N = , M = , INF = 0x3f3f3f3f; struct Edge {
int nex, v, len;
}edge[M << ]; int top = ; int e[N], m, n, vis[N], small, large, fd, g; int gcd(int a, int b) {
if(!b) {
return a;
}
return gcd(b, a % b);
} inline void add(int x, int y, int z) {
top++;
edge[top].nex = e[x];
edge[top].len = z;
edge[top].v = y;
e[x] = top;
return;
} void DFS(int x, int in_e) { // error : in_edge space
small = std::min(small, vis[x]);
large = std::max(large, vis[x]);
//printf("vis[%d] = %d \n", x, vis[x]);
for(int i = e[x]; i; i = edge[i].nex) {
if((i ^ ) == in_e) {
continue;
}
int y = edge[i].v;
if(vis[y] == INF) {
vis[y] = edge[i].len + vis[x];
DFS(y, i);
}
else {
int cir = abs(edge[i].len + vis[x] - vis[y]); // error : abs(vis[x] - vis[y]) + 1
//printf(">_< >>> [%d]%d [%d]%d \n", x, vis[x], y, vis[y]);
//printf("cir = %d \n", cir);
g = gcd(g, cir);
fd = ;
}
}
return;
} int main() { scanf("%d%d", &n, &m);
for(int i = , x, y; i <= m; i++) {
scanf("%d%d", &x, &y);
add(x, y, );
add(y, x, -);
}
memset(vis, 0x3f, sizeof(vis));
int lenth = ;
for(int i = ; i <= n; i++) {
if(vis[i] == INF) {
large = small = ;
vis[i] = ;
DFS(i, );
lenth += large - small + ;
}
} //printf("fd = %d \n", fd); if(!fd || !g) { // error : !g space
if(n <= || lenth <= ) { // error : lenth <= 2 space
printf("-1 -1");
}
else {
printf("%d 3", lenth);
}
return ;
}
if(g < ) {
printf("-1 -1");
}
else {
printf("%d ", g);
for(int i = ; i <= g; i++) {
if(g % i == ) {
printf("%d", i);
break;
}
}
} return ;
}

AC代码

太毒瘤了......

洛谷P1477 假面舞会的更多相关文章

  1. 洛谷 P1477 [NOI2008]假面舞会

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

  2. 洛谷P1538迎春舞会之数字舞蹈

    题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...

  3. 洛谷 P1538 迎春舞会之数字舞蹈

    题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...

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

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

  5. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  6. 【洛谷P1352】没有上司的舞会

    [洛谷P1352]没有上司的舞会 x舷售 锚」翅θ 但是 拙臃 蓄ⅶ榔 暄条熨卫 翘ヴ馇 表现无愧于雪月工作室的核心管理 爸惚扎掬 颇瓶 芟缆肝 貌痉了 洵┭笫装 嗝◇裴腋 褓劂埭 ...

  7. 洛谷 p1352 没有上司的舞会 题解

    P1352 没有上司的舞会 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员 ...

  8. 洛谷1352 CODEVS1380 没有上司的舞会

    洛谷的测试数据貌似有问题,4个点RE不可避 CODEVS可AC —————— 10分钟后追记:在洛谷把数组范围开到10000+就过了 —————— 题目描述 Description Ural大学有N个 ...

  9. 洛谷 P4062 - [Code+#1]Yazid 的新生舞会 的线性做法

    洛谷题面传送门 一个线性做法. \(n\log n\) 解法可以戳这里查看 首先回顾一下 \(n\log n\) 解法的过程:我们对于每一个数 \(x\),考察其出现位置,设为 \(t_1,t_2,t ...

随机推荐

  1. Docker实现运行tomcat并部署项目war包,并实现挂载目录

    之前写的有点乱,现在再来整理一下docker的简单部署运行 借鉴博客:https://blog.csdn.net/qq_32351227/article/details/78673591 一.dock ...

  2. MyBatis映射文件4(参数获取#{}和${}/select标签详解[返回类型为list])

    参数获取 之前我们都是采用#{}的方式进行参数传递,其实MyBatis还有另外的参数传递方式${} 使用方法相同,但是还是有很大区别的 这里做一个测试: <select id="get ...

  3. sed 双引号 单引号的区别

    a="abcd" b="abc" sed -i '/$a/ s/$/$b/' test.a 我想在test.a中匹配以”abcd“开头的行,然后在行尾加入”ab ...

  4. Appium之开发环境搭建

    1.下载Appium 去官方网站下载http://appium.io/# : 本次以appium-desktop-setup-1.8.0.exe 文件为例,使用桌面版就不再需要下载server版本: ...

  5. WPF中如何调整TabControl的大小,使其跟随Window的大小而改变?

    多年不写技术博客,手生的很,也不知道大家都关注什么,最近在研究Wpf及3d模型的展示,碰到很多问题,这个是最后一个问题,写出来小结一下...... WPF中如何调整TabControl的大小,使其跟随 ...

  6. Django-urls路由系统

    Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. ...

  7. 22Java之JDBCTemplate总结

    写在前面:这里总结4种方式来操作数据库(SE阶段) 一.JDBC         JDBC有关的类:都在java.sql 和 javax.sql 包下.   1.数据准备               ...

  8. 基于docker部署使用ELK+FileBeat日志管理平台

    Docker从狭义上来讲就是一个进程,从广义上来讲是一个虚拟容器,专业叫法为 Application Container(应用容器).Docker进程和普通的进程没有任何区别,它就是一个普通的应用进程 ...

  9. CentOS6.5内核编译

    内核源码包下载地址,戳我 1.准备并解压内核安装包:linux-4.14.6.tar.xz # .tar.xz -C /usr/src/ # cd /usr/src/linux- #查看linux-目 ...

  10. bzoj 1452: [JSOI2009]Count (二维树状数组)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1452 思路: 对每个颜色开一个二维树状数组维护就好了 实现代码: #include<b ...