这场比赛没打,看同学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;
}

转载于:https://www.cnblogs.com/daklqw/p/11546379.html

1209F - Koala and Notebook相关推荐

  1. CF-1209 F. Koala and Notebook(建图BFS)

    CF-1209 F. Koala and Notebook(建图BFS) 题目链接 题意 n个城市m个双向边,从点1可以到达任何点,把点1到到其他点所经过的边写成一行可以得到一个大数,你的任务使得这个 ...

  2. 图论 ---- CF1209F. Koala and Notebook(多位数字拆边+BFS)

    题目链接 题目大意: 给你一个nnn个点mmm条边的无向联通图,每条边上面都有一条权值就是输入时候的位置,然后问你从111号点出发到其他n−1n-1n−1个点最小权值是多少?路径权值是路径上面的数字拼 ...

  3. 如何在本地访问远程服务器的jupyter notebook?

    背景 jupyter notebook作为一个非常好用的工具,我们经常会在学习python以及深度学习的时候用到,但是经常我们面临的问题是远程服务器上的jupyter notebook,我们可能在本地 ...

  4. Python | 安装Jupyter Notebook及其目录的更改 jupyter问题

    20211223 在非输入出双击d删除单元格 20211218 https://www.jianshu.com/p/c51f9504d84f jupyter,ipynb转py 20211117 htt ...

  5. Jupyter Notebook 远程访问设置方法

    1. 设置密码 In [1]: from notebook.auth import passwd In [2]: passwd() Enter password: Verify password: O ...

  6. Ubuntu 安装 IPython、jupyter notebook

    1. 升级 pip sudo pip3 install --upgrade pip 2. 安装 IPython IPython 5.x 是最后一个支持 Python2 的 IPython . sudo ...

  7. Python的必学技术——Jupyter Notebook

    推荐 Jupyter NoteBook 的原因:整合所有的资源.交互性编程体验和零成本重现结果. Jupyter NoteBook 能够把软件代码.计算输出.解释文档.多媒体资源整合在一起的多功能科学 ...

  8. Anaconda中pytorch环境搭建(包括详细的虚拟环境创建,以及虚拟环境中jupyter notebook的使用)

    PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序. 2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch.它是一个 ...

  9. Windows下超详细安装Anaconda3以及jupyter notebook

    Anaconda是一个软件包管理器,一个环境管理器以及一个Python发行版,其中包含许多开源软件包的集合(numpy,scikit-learn,scipy,pandas等).如果在安装Anacond ...

最新文章

  1. 【CV】吴恩达机器学习课程笔记第11章
  2. DFS:图的联通块 AOJ-0118 Property Distribution
  3. Cassandra使用的各种策略
  4. 大数据入门之Hadoop基础学习
  5. 42.移动构造函数的合成规则
  6. ccna____总结
  7. Flex CursorManager
  8. 现代c++之列表初始化/统一初始化
  9. leetcode初级算法2.旋转数组
  10. Java中的位移运算符
  11. asp.net dev xtraReporting(一)静态页面
  12. pythonATM,购物车项目实战4-settings配置设置
  13. 01-SQL基本语句
  14. 信号检测与估计(1)
  15. 《通信技术 - 以太网》详解以太网(二)
  16. iTunes恢复系统显示正在等待iPhone解决步骤
  17. View之ExpandableLists
  18. 《连线》评出2008年十大最值得关注创业公司
  19. 分享使用谷歌Colab 常用小tips, 玩转Google Colab
  20. 论文笔记:UCTransNet: Rethinking the Skip Connections in U-Net from a Channel-wisePerspective with Transf

热门文章

  1. 无法安装或运行应用程序。该应用程序要求首先在“全局程序集缓存(gac)”中安装程序集system.data.entity...
  2. [转]C++/CLI与C#常用语法对比
  3. ActiveMQ传输文件的几种方式原理与优劣
  4. 【SDCC 2016·杭州站】9月22日大数据实战专场精彩呈现
  5. Purism 宣布推出 PureOS 应用商店
  6. Ch -- 一个 C/C++ 解释器
  7. Hyper-V 内存管理必须知道的
  8. codeblocks、wxWidgets环境配置
  9. 高级交换路由课程PPT下载打包了
  10. nginx+tomcat的负载均衡