这场比赛没打,看同学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的更多相关文章

  1. CodeForces - 1209F Koala and Notebook(拆边+BFS)

    题意:给定一个n个点m条边的无向图,边权分别为1-m,从起点1出发,每经过一条边就把边权以字符串的形式加入末尾,求到达其他每个点的最小字符串(长度不同的短的更小,否则字典序小的更小). 思路很巧妙,将 ...

  2. Codeforces 1209F. Koala and Notebook

    传送门 考虑到达某个点时的数长度要尽量短,那么可以把边长看成此边十进制下的位数 那么对于最终答案我们只要考虑最短路 $DAG$ 上的情况 又发现其实边长都很小,所以可以暴力拆边,把边权都拆成 $1$, ...

  3. CF1207F Koala and Notebook(BFS)

    你可能会好奇为什么只有一个 BFS 的标签,却还能够排到 F 的位置. 因为它实在是太 简 单 了 有更新 首先,比较两个数,可以先比较两个数的长度,然后比较两个数看成数字串后的字典序. 不妨先把每条 ...

  4. [CF1209F]Koala and Notebook_堆优化dij

    Koala and Notebook 题目链接:https://codeforces.com/contest/1209/problem/F 数据范围:略. 题解: 开始的时候看错题了....莫名其妙多 ...

  5. Codeforces Round #584

    传送门 A. Paint the Numbers 签到. Code #include <bits/stdc++.h> using namespace std; typedef long l ...

  6. Codeforces Round #584 - Dasha Code Championship - Elimination Round (rated, open for everyone, Div. 1 + Div. 2)

    怎么老是垫底啊. 不高兴. 似乎 A 掉一道题总比别人慢一些. A. Paint the Numbers 贪心,从小到大枚举,如果没有被涂色,就新增一个颜色把自己和倍数都涂上. #include< ...

  7. jQuery可自动播放动画焦点图插件Koala

    Koala是一款简单而实用的jQuery焦点图幻灯片插件,焦点图不仅可以在播放图片的时候让图片有淡入淡出的动画效果,而且图片可以自动播放.该jQuery焦点图的每一张图片都可以设置文字描述,并浮动在图 ...

  8. Sass:初识Sass与Koala工具的使用

    一.下载Koala(找到合适的系统版本)并安装 二.先新建一个css文件夹,并在里面新建一个文本文档(.txt),将其命名为demo.scss 三.打开Koala,将css文件夹拽进来,可以修改一下输 ...

  9. ipython notebook 浏览器中编写数学公式和现实

    Python Notebook简介1 http://www.cnblogs.com/cbscan/p/3545084.html $ python -m IPython http://pypi.pyth ...

随机推荐

  1. MySQL索引详解(优缺点,何时需要/不需要创建索引,索引及sql语句的优化)

     一.什么是索引? 索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息. 二.索引的作用? 索引相当于图书上的目录,可以根据目录上的页码快速找到所需的内容,提 ...

  2. 入门&常量&变量

    位:二进制中,每个0或1就是一个位,叫做bit(比特) 字节:计算机最小是存储单元(byte或B) 8bit = 1B 常用cmd命令: 启动: Win+R,输入cmd回车切换盘符 盘符名称:进入文件 ...

  3. vue iview面包屑

    简单看一下vue,iview的面包屑怎么写呢? 简单的思路:1.获取到路由记录$route.matched 2.渲染 效果: 一.$route.matched 官网地址:https://router. ...

  4. jQuery 遍历 - 后代

    向下遍历 DOM 树 下面是两个用于向下遍历 DOM 树的 jQuery 方法: children() find() jQuery children() 方法 children() 方法返回被选元素的 ...

  5. 2019-11-29-Roslyn-通过-NuGet-库修改应用程序入口函数

    title author date CreateTime categories Roslyn 通过 NuGet 库修改应用程序入口函数 lindexi 2019-11-29 08:37:49 +080 ...

  6. C++ Concurrency In Action 一些重点

    全部来自于gitbook  C++并发编程(中文版) 需要对一个还未销毁的std::thread对象使用join()或detach().如果想要分离一个线程,可以在线程启动后,直接使用detach() ...

  7. js 简单实现隐藏和显示

    <html> <head> <meta charset="gb2312"> <title>隐藏和显示</title> & ...

  8. AIX 下的 find 命令使用

      平常我们使用 find , -size +100M/K/G ,就可以找到相应大小的文件了. 可是 AIX 平台下,却好像不能使用,虽然执行起来不报错,但是查找出来的文件却并不是我们想要的.所以 m ...

  9. 树形DP Choosing Capital for Treeland

    给你一棵有向树,需要选定一个点为capital,满足翻转边数最小 思路:先求出1为capital 的答案,然后向下更新孩子节点 dp[i]=dp[i-1]+judge(i); #include< ...

  10. 谈谈对MVC的认识?

    核心思想是:视图和用户交互通过事件导致控制器改变 控制器改变导致模型改变 或者控制器同时改变两者 模型改变 导致视图改变 或者视图改变 潜在的从模型里面获得参数 来改变自己.他的好处是可以将界面和业务 ...