传送门

考虑到达某个点时的数长度要尽量短,那么可以把边长看成此边十进制下的位数

那么对于最终答案我们只要考虑最短路 $DAG$ 上的情况

又发现其实边长都很小,所以可以暴力拆边,把边权都拆成 $1$,这样就可以 $BFS$ 了

考虑最优情况,对于 $BFS$ 时同一层的点,要扩展到下一层,我们肯定要优先让边的数字为 $1$ 的边先走

然后剩下走 $1$ 到不了的点我们再试着走 $2$,然后 $3$ ,$4$ ... 这样下去,这样到达下一层以后每个点的路径才是最优的

所以我们就要一些比较神仙的操作来实现这个过程...我可能也讲不清楚了,自己看代码吧

代码参考:wxhtxdy

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=1e6+,mo=1e9+;
int n,m,tot,ans[N];
vector <int> e,V[N][],Q[N];//V是边,Q是BFS的队列,队列为啥是vector等等就知道了...
bool vis[N];
int main()
{
n=read(),m=read(); int a,b;
tot=n;
for(int i=;i<=m;i++)
{
a=read(),b=read(); int t=i,c; e.clear();
while(t) c=t%,t/=,e.push_back(c);
reverse(e.begin(),e.end()); int pre=a,len=e.size();
for(int j=;j<len;j++)//拆点
{
int np=(j==len- ? b : ++tot);
V[pre][e[j]].push_back(np),pre=np;
}
pre=b;
for(int j=;j<len;j++)//无向图两边都要拆
{
int np=(j==len- ? a : ++tot);
V[pre][e[j]].push_back(np),pre=np;
}
}
int T=; Q[++T].push_back(); vis[]=;
for(int i=;i<=T;i++)
for(int j=;j<=;j++)//优先走数字小的
{
bool flag=;
for(auto x: Q[i])//对于同一个i,Q[i]中的点的ans都是一样的
for(auto v: V[x][j])//走到下一层
{
if(vis[v]) continue;//走过就不用再走了
vis[v]=flag=; Q[T+].push_back(v);
ans[v]=(10ll*ans[x]+j)%mo;//更新答案
}
if(flag) T++;
}
for(int i=;i<=n;i++) printf("%d\n",ans[i]);
return ;
}

Codeforces 1209F. Koala and Notebook的更多相关文章

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

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

  2. 1209F - Koala and Notebook

    这场比赛没打,看同学fst了,于是来看看. 这道题看似简单,但是没想清楚细节真的不太行.像现在熬到十一点左右,脑子真的不行. 首先显然位数越小越好,因为每一位要比较,不如拆点.此时要拆成两条有向链(开 ...

  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. Codeforces Round #584 B. Koala and Lights

    链接: https://codeforces.com/contest/1209/problem/B 题意: It is a holiday season, and Koala is decoratin ...

  8. Codeforces Round #284 (Div. 2)A B C 模拟 数学

    A. Watching a movie time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. CodeForces 433C Ryouko's Memory Note-暴力

                                             Ryouko's Memory Note Time Limit:1000MS     Memory Limit:262 ...

随机推荐

  1. ubuntu开启ssh服务时,报:start:Unknown job : ssh

    这里是参考网站资料,并记录下. 如图所示: 解决方法: 输入以下命令即可 /usr/sbin/sshd mkdir /var/run/sshd /usr/sbin/sshd netstat -nlt ...

  2. Unity3D_(数据)LitJson创建和解析Json

    LitJson github: 传送门 JsonUtility创建和解析Json 传送门 LitJson.dll百度云盘 传送门 密码:p1py 加载LitJson.dll到Unity中 在Asset ...

  3. 原生Js_实现简单选项卡功能

    javascript实现选项卡功能,在<script>...</script>中编写代码 实现步骤 a)获得各操作的dom对象: b)在所有按钮对象上添加单击事件: c)设置所 ...

  4. python 安装-ERROR---Unable to find vcvarsall.bat

    系统配置:Windows10 x64, Visual Studio 2017, Python2.7.1 报错信息:error: Unable to find vcvarsall.bat 报错原因:在生 ...

  5. hive 分组排序函数 row_number() over(partition by " " order by " "desc

    语法:row_number() over (partition by 字段a order by 计算项b desc ) rank --这里rank是别名 partition by:类似hive的建表, ...

  6. sqli-labs(42)

    0x01 喔? 熟悉的界面? 注册一下 但是好像不行了 那我们只有 嘻嘻看看页面了 也是以失败告终的  那我们该怎么办  我们来看看源码 我们看见login的页面未对 password进行任何的过滤 ...

  7. LeetCode 198. 打家劫舍(House Robber)LeetCode 213. 打家劫舍 II(House Robber II)

    打家劫舍 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报 ...

  8. What exactly is the parameter e (event) and why pass it to JavaScript functions?

    What exactly is the parameter e (event) and why pass it to JavaScript functions? 问题 Well, when I lea ...

  9. 【SSM】---Spring+SpringMVC+Mybatis框架整合

    参考 百度经验 https://jingyan.baidu.com/article/2a1383288a85a9074a134f1b.html CSDN http://blog.csdn.net/ge ...

  10. leaflet的入门开发(一)

    2016年9月27日—1.0leaflet,最快的,最稳定和严谨的leaflet,终于出来了! leaflet是领先的开源JavaScript库为移动设备设计的互动地图.重33 KB的JS,所有映射大 ...