1209F - Koala and Notebook
生活随笔
收集整理的這篇文章主要介紹了
1209F - Koala and Notebook
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
這場(chǎng)比賽沒打,看同學(xué)fst了,于是來看看。
這道題看似簡單,但是沒想清楚細(xì)節(jié)真的不太行。像現(xiàn)在熬到十一點(diǎn)左右,腦子真的不行。
首先顯然位數(shù)越小越好,因?yàn)槊恳晃灰容^,不如拆點(diǎn)。此時(shí)要拆成兩條有向鏈(開始實(shí)現(xiàn)成了無向鏈)
然后這個(gè)時(shí)候就可以很方便地跑最短路了。但是細(xì)節(jié)比較多。
首先直接貪心走最小邊然后bfs是不行的,所以要考慮分層(這里也掛了)。對(duì)于每一個(gè)點(diǎn)伸出去邊長相等的屬于一個(gè)等價(jià)類。此時(shí)容易證明等價(jià)類數(shù)量是 \(O(m)\) 的。
于是直接分層跑即可。由字典序從小到大枚舉等價(jià)類,易知更新時(shí)不斷在等價(jià)類列表尾插入一個(gè)新的點(diǎn)是對(duì)的。
這道題就這兩個(gè)難點(diǎn),于是作為低水平選手兩處都被坑到了。
#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; }轉(zhuǎn)載于:https://www.cnblogs.com/daklqw/p/11546379.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的1209F - Koala and Notebook的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 后盾网lavarel视频项目---图片上
- 下一篇: 后盾网lavarel视频项目---模型一