1209F - Koala and Notebook
这场比赛没打,看同学fst了,于是来看看。
这道题看似简单,但是没想清楚细节真的不太行。像现在熬到十一点左右,脑子真的不行。
首先显然位数越小越好,因为每一位要比较,不如拆点。此时要拆成两条有向链(开始实现成了无向链)
然后这个时候就可以很方便地跑最短路了。但是细节比较多。
首先直接贪心走最小边然后bfs是不行的,所以要考虑分层(这里也挂了)。对于每一个点伸出去边长相等的属于一个等价类。此时容易证明等价类数量是 \(O(m)\) 的。
于是直接分层跑即可。由字典序从小到大枚举等价类,易知更新时不断在等价类列表尾插入一个新的点是对的。
这道题就这两个难点,于是作为低水平选手两处都被坑到了。
#include <bits/stdc++.h>
const int mod = 1000000007;
const int MAXN = 1100010;
std::vector<int> G[MAXN][10], qs[MAXN];
void addedge(int b, int e, int v) {
G[b][v].push_back(e);
}
int n, m, idx, dp[MAXN];
bool vis[MAXN];
int main() {
std::ios_base::sync_with_stdio(false), std::cin.tie(0);
std::cin >> n >> m; idx = n;
for (int i = 1; i <= m; ++i) {
int t1, t2; std::cin >> t1 >> t2;
static int arr[10], bak; bak = 0;
int t = i;
while (t) arr[bak++] = t % 10, t /= 10;
int lst = t1;
for (int j = bak - 1; ~j; --j) {
int now = j ? ++idx : t2;
addedge(lst, now, arr[j]);
lst = now;
}
for (int j = bak - 1; ~j; --j) {
int now = j ? ++idx : t1;
addedge(lst, now, arr[j]);
lst = now;
}
}
int T;
qs[T = 1].push_back(1); vis[1] = true;
for (int P = 1; P <= T; ++P) {
for (int j = 0; j != 10; ++j) {
bool flg = false;
for (auto t : qs[P]) {
for (auto v : G[t][j]) {
if (vis[v]) continue;
vis[v] = true;
dp[v] = (dp[t] * 10ll + j) % mod;
qs[T + 1].push_back(v);
flg = true;
}
}
if (flg) ++T;
}
}
for (int i = 2; i <= n; ++i)
std::cout << dp[i] << '\n';
return 0;
}
1209F - Koala and Notebook的更多相关文章
- CodeForces - 1209F Koala and Notebook(拆边+BFS)
题意:给定一个n个点m条边的无向图,边权分别为1-m,从起点1出发,每经过一条边就把边权以字符串的形式加入末尾,求到达其他每个点的最小字符串(长度不同的短的更小,否则字典序小的更小). 思路很巧妙,将 ...
- Codeforces 1209F. Koala and Notebook
传送门 考虑到达某个点时的数长度要尽量短,那么可以把边长看成此边十进制下的位数 那么对于最终答案我们只要考虑最短路 $DAG$ 上的情况 又发现其实边长都很小,所以可以暴力拆边,把边权都拆成 $1$, ...
- CF1207F Koala and Notebook(BFS)
你可能会好奇为什么只有一个 BFS 的标签,却还能够排到 F 的位置. 因为它实在是太 简 单 了 有更新 首先,比较两个数,可以先比较两个数的长度,然后比较两个数看成数字串后的字典序. 不妨先把每条 ...
- [CF1209F]Koala and Notebook_堆优化dij
Koala and Notebook 题目链接:https://codeforces.com/contest/1209/problem/F 数据范围:略. 题解: 开始的时候看错题了....莫名其妙多 ...
- Codeforces Round #584
传送门 A. Paint the Numbers 签到. Code #include <bits/stdc++.h> using namespace std; typedef long l ...
- Codeforces Round #584 - Dasha Code Championship - Elimination Round (rated, open for everyone, Div. 1 + Div. 2)
怎么老是垫底啊. 不高兴. 似乎 A 掉一道题总比别人慢一些. A. Paint the Numbers 贪心,从小到大枚举,如果没有被涂色,就新增一个颜色把自己和倍数都涂上. #include< ...
- jQuery可自动播放动画焦点图插件Koala
Koala是一款简单而实用的jQuery焦点图幻灯片插件,焦点图不仅可以在播放图片的时候让图片有淡入淡出的动画效果,而且图片可以自动播放.该jQuery焦点图的每一张图片都可以设置文字描述,并浮动在图 ...
- Sass:初识Sass与Koala工具的使用
一.下载Koala(找到合适的系统版本)并安装 二.先新建一个css文件夹,并在里面新建一个文本文档(.txt),将其命名为demo.scss 三.打开Koala,将css文件夹拽进来,可以修改一下输 ...
- ipython notebook 浏览器中编写数学公式和现实
Python Notebook简介1 http://www.cnblogs.com/cbscan/p/3545084.html $ python -m IPython http://pypi.pyth ...
随机推荐
- 2-SAT问题介绍求解 + 模板题P4782
(点击此处查看原题) 什么是2-SAT问题 sat 即 Satisfiability,意思为可满足,那么2-SAT表示一些布尔变量只能取true或者false,而某两个变量之间的值存在一定的关系(如: ...
- 阻塞I/O、非阻塞I/O和I/O多路复用、怎样理解阻塞非阻塞与同步异步的区别?
“阻塞”与"非阻塞"与"同步"与“异步"不能简单的从字面理解,提供一个从分布式系统角度的回答.1.同步与异步 同步和异步关注的是消息通信机制 (syn ...
- IntelliJ IDEA setup JDK无效
参考 问题现象:功能全部爆红,总是提示“setup JDK”,设置JDK后无效.但程序能够正常编译和运行. 解决方法: File -> Invalidate Caches/Restart -& ...
- ubuntu 安装vim报错
问题:ubuntu18.04默认没有安装vim,使用 sudo apt install 提示 错误信息: 下列信息可能会对解决问题有所帮助: 下列软件包有未满足的依赖关系: vim : 依赖: vim ...
- css之盒模型(box,box-shadow,overflow,BFC)
一.盒模型的概念 CSS中每一个元素都是一个盒模型(Box Model),包括HTML和body标签元素.一般称之为box model.它的本质就是一个盒子,它的属性有margin,border,pa ...
- 帝国cms 反馈
<form name='feedback' method='post' enctype='multipart/form-data' action='/e/enews/index.php' ons ...
- [转] JAVA分为三个体系,JavaSE,JavaEE,JavaME(J2ME)的区别以及各个版
Java SE(JavaPlatform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程 ...
- nginx服务学习第一章
一.ubuntu系统安装nginx服务 # apt-get install nginx 二.nginx.config配置文件详解 配置文件结构: 全局块(全局变量) events{ } http{ h ...
- Ceph实战入门之安部署篇
最近Ceph官方发布了luminous长久支持版,新版本增加了很多有意思的功能,但是入门还是先从部署安装开始. 环境说明 在Win10下安装VMware® Workstation 12 Pro软件,用 ...
- 七、Vue Cli+ApiCloud
一.api.js (参考) 顶部注释: 底部注释: 二.导入 效果: 继续使用: 运行环境:用APP打开,浏览器没有api对象,只有APP运行环境才有API对象 代码如下: <template& ...