坑死了......

题意:给你个有向图,你需要把点分成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. C# Note14: Editable WPF ListView

    (1)https://stackoverflow.com/questions/5652527/editable-wpf-listview (2)How to: Create a ListView wi ...

  2. 将大数组里面的小数组平行展开的实现(Making a flat list out of list of lists in Python)

    今天在生成数据的时候遇到了这个需求,其实写一个for循环可以很容易解决这个问题,但是无论是性能还是酷炫程度上都不行 所以顺手搜索了一下. 例子是将 l = [[1, 2, 3], [4, 5, 6], ...

  3. python学习笔记(12)--程序设计方法学

    计算思维: 逻辑思维:推演和演绎 实证思维:实验和验证,引力波->实验 计算思维:设计和构造,计算机为代表,汉诺塔递归. 计算思维特征 抽象和自动化,抽象问题的计算过程,利用计算机自动化求解. ...

  4. 每日一小时linux(1)--sysRq

    参考https://www.ibm.com/developerworks/cn/linux/l-cn-sysrq/index.html SysRq 是什么 你是否遇到服务器不能通过 SSH 登录,也不 ...

  5. jenkins中通过execute shell启动的进程会被杀死的问题

    在jenkins中配置自动更新部署项目时,如果采取用execute shell启动/关闭tomcat,会发现可以进行关闭tomcat, 但是无法启动tomcat,虽然构建会显示执行成功,但是查看进程, ...

  6. git ignore 忽略 idea文件

    下载了项目组的代码之后发现,一个问题,一编译就生成了很多的 .idea文件夹 还有 target文件夹,这些是不需要提交到git上的, 需要提交的时候屏蔽一下,所以需要建立一个ignore文件列表把他 ...

  7. 数据库迁移(创建关联等操作) Target database is not up to date报错

    使用Mysql-sqlalchemy执行数据库迁移 来更新数据库: 队长试探性的在网上找了几种方案 依然没有解决报错问题: 后来看了https://www.aliyun.com/jiaocheng/4 ...

  8. 为WebRTC 应用部署Turn Server

    部署WebRTC 或 SIP p2p 方案时经常会遇到p2p 无法穿透的环境, 这时就是TunServer 的用武之地了. 这里我们使用turnserver-0.7.3 下载confuse依赖库 wg ...

  9. How to install Arch Linux

    fdisk -l mkfs.ext4 /dev/sdaX mount /dev/sdaX /mnt mkdir -p /mnt/boot/ mount /dev/sdaY /mnt/boot/ arc ...

  10. codeforces433B

    Kuriyama Mirai's Stones CodeForces - 433B 有n颗宝石,每个宝石都有自己的价值. 然后m次询问.问区间[i,j]的宝石的总值,或者问排序后的区间[i,j]的总值 ...