洛谷P1477 假面舞会
坑死了......
题意:给你个有向图,你需要把点分成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 假面舞会的更多相关文章
- 洛谷 P1477 [NOI2008]假面舞会
题目链接 题目描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会. 今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具.每个面具都有一个编号,主办方 ...
- 洛谷P1538迎春舞会之数字舞蹈
题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...
- 洛谷 P1538 迎春舞会之数字舞蹈
题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...
- 【洛谷】1477:[NOI2008]假面舞会【图论】
P1477 [NOI2008]假面舞会 题目描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会. 今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢的面具 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 【洛谷P1352】没有上司的舞会
[洛谷P1352]没有上司的舞会 x舷售 锚」翅θ 但是 拙臃 蓄ⅶ榔 暄条熨卫 翘ヴ馇 表现无愧于雪月工作室的核心管理 爸惚扎掬 颇瓶 芟缆肝 貌痉了 洵┭笫装 嗝◇裴腋 褓劂埭 ...
- 洛谷 p1352 没有上司的舞会 题解
P1352 没有上司的舞会 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员 ...
- 洛谷1352 CODEVS1380 没有上司的舞会
洛谷的测试数据貌似有问题,4个点RE不可避 CODEVS可AC —————— 10分钟后追记:在洛谷把数组范围开到10000+就过了 —————— 题目描述 Description Ural大学有N个 ...
- 洛谷 P4062 - [Code+#1]Yazid 的新生舞会 的线性做法
洛谷题面传送门 一个线性做法. \(n\log n\) 解法可以戳这里查看 首先回顾一下 \(n\log n\) 解法的过程:我们对于每一个数 \(x\),考察其出现位置,设为 \(t_1,t_2,t ...
随机推荐
- 网络编程--使用TCP协议发送接收数据
package com.zhangxueliang.tcp; import java.io.IOException; import java.io.OutputStream; import java. ...
- Microsoft Visual Studio Ultimate 2013密钥
Visual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9Visual Studio Premium 2013 KEY(密钥): ...
- 高并发之API接口限流
在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再 ...
- Linux基础学习笔记4-文本处理
本章内容 抽取文本的工具 文件内容:less和cat 文件截取:head和tail 按列抽取:cut 按关键字抽取:grep 文件查看 文件查看命令:cat,tac,rev cat [OPTION] ...
- Django模板渲染
一 . 语法 # 关于模板渲染只需要记住两种语法就可以: 1.{{ }} # 里面写变量 2.{% %} # 里面写与逻辑相关的,比如for循环 二 . 变量名 在django的模板语言中按照语法: ...
- 如何建立一个WCF服务并将其发布到IIS上
在我们的软件开发中,经常会连接到数据库中,如果是常规的操作,我们经常会将连接数据库的字符串写在配置文件中,然后去读取数据库的连接字符串,其实这种方式是非常不科学的,这会直接暴露我们的数据库,直接暴露我 ...
- Fabric运维从入门到精通
1. fabric的安装 在windows下的python3中安装fabric: 在python安装根目录下使用pip install fabric 安装 如图: fabric只支持python2不支 ...
- sql 用户相关命令
查看所有用户 select distinct concat(user, '@', host,';') as userList from mysql.user; select #查找 distinct ...
- qtp 自动货测试桌面程序-笔记(使用函数)
新建-function 写入函数 rem 关闭出现错误窗口Function checkExist() If Window("出现错误").WinObject("确定&qu ...
- epoch、 iteration和batchsize区别
转自: https://blog.csdn.net/qq_27923041/article/details/74927398 深度学习中经常看到epoch. iteration和batchsize,下 ...