Codeforces 1209F. Koala and Notebook
考虑到达某个点时的数长度要尽量短,那么可以把边长看成此边十进制下的位数
那么对于最终答案我们只要考虑最短路 $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的更多相关文章
- CodeForces - 1209F Koala and Notebook(拆边+BFS)
题意:给定一个n个点m条边的无向图,边权分别为1-m,从起点1出发,每经过一条边就把边权以字符串的形式加入末尾,求到达其他每个点的最小字符串(长度不同的短的更小,否则字典序小的更小). 思路很巧妙,将 ...
- 1209F - Koala and Notebook
这场比赛没打,看同学fst了,于是来看看. 这道题看似简单,但是没想清楚细节真的不太行.像现在熬到十一点左右,脑子真的不行. 首先显然位数越小越好,因为每一位要比较,不如拆点.此时要拆成两条有向链(开 ...
- 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< ...
- Codeforces Round #584 B. Koala and Lights
链接: https://codeforces.com/contest/1209/problem/B 题意: It is a holiday season, and Koala is decoratin ...
- 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 ...
- CodeForces 433C Ryouko's Memory Note-暴力
Ryouko's Memory Note Time Limit:1000MS Memory Limit:262 ...
随机推荐
- Linux 简单打印日志(二)
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> //# ...
- windows下kafka配置入门 示例
实验平台与软件: 操作系统:windows7 32 位 java 开发包: jdk1.8.0_144 集群: zookeeper-3.3.6 消息队列: kafka_2.11-0.11.0.1 安装 ...
- AtCoder AGC030B Tree Burning
题目链接 https://atcoder.jp/contests/agc030/tasks/agc030_b 题解 细节好题.. 首先假设第一步往右走,那么可以发现当拐弯的次数一定时路径是唯一的 于是 ...
- [VIJOS2055][SDOI2019]移动金币:DP+组合数学
分析 显然可以转化为阶梯nim. 于是问题转化为了对于所有\(i \in [0,n-m]\),求长度为\(\lfloor\frac{m+1}{2}\rfloor\),和为\(i\),异或和非\(0\) ...
- python3笔记十四:python可变与不可变数据类型+深浅拷贝
一:学习内容 python3中六种数据类型 python赋值 python浅拷贝 python深拷贝 二:python3六种数据类型 1.六种数据类型 Number(数字) string(字符串) L ...
- LeetCode 46. 全排列(Permutations)
题目描述 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [ ...
- Dubbo Admin 控制台
下载项目源码 https://github.com/apache/incubator-dubbo-admin 解压后配置 zookeeper 地址,路径为 dubbo-admin-server/src ...
- leetcode-easy-string- 125 Valid Palindrome
mycode 9.62% class Solution(object): def isPalindrome(self, s): """ :type s: str :r ...
- C语言转义字符表和ASCII码表
主要参考 http://www.51hei.com/mcu/4342.html 以及 https://www.cnblogs.com/jason207489550/p/6663444.html
- 从 AVFrame 中取出帧(YUV)保存为 Mat 格式
由于 cnblogs 不支持科学公式,完整内容请移步原文链接 原文地址:从 AVFrame 中取出帧(YUV)保存为 Mat 格式 从 AVFrame 中取出帧(YUV)保存为 Mat 格式 本文档针 ...