CodeForces - 1209F Koala and Notebook(拆边+BFS)
题意:给定一个n个点m条边的无向图,边权分别为1-m,从起点1出发,每经过一条边就把边权以字符串的形式加入末尾,求到达其他每个点的最小字符串(长度不同的短的更小,否则字典序小的更小)。
思路很巧妙,将每个边按照边权的位数拆成若干条虚边+若干个虚点,然后以1为起点进行BFS,边权相同的放在一起处理,这样就能保证每个点第一次到达的路径是字符串最小的路径了。
边权排序可以用基排,因为只能取0-9,常数很小。
注意各种细节。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+,inf=0x3f3f3f3f,mod=1e9+;
int hd[N],ne,n,m,dp[N],tot,buf[N],C[];
struct E {int u,v,c,nxt;} e[N<<];
void addedge(int u,int v,int c) {e[ne]= {u,v,c,hd[u]},hd[u]=ne++;}
queue<int> q;
vector<int> vec,vec2;
int upd(int u,int x) {
if(!~dp[u]) {dp[u]=x,q.push(u); return ;}
return ;
}
void bfs() {
memset(dp,-,sizeof dp);
while(q.size())q.pop();
upd(,),q.push(-);
while(q.size()) {
vec.clear();
for(; q.front()!=-; q.pop())vec.push_back(q.front());
q.pop();
vec2.clear();
for(int u:vec)for(int i=hd[u]; ~i; i=e[i].nxt)vec2.push_back(i);
for(int i=; i<=; ++i)C[i]=;
for(int i=; i<vec2.size(); ++i)++C[e[vec2[i]].c];
for(int i=; i<=; ++i)C[i]+=C[i-];
for(int i=; i<vec2.size(); ++i)buf[--C[e[vec2[i]].c]]=vec2[i];
for(int i=,j,k; i<vec2.size(); i=j) {
for(j=i; j<vec2.size()&&e[buf[j]].c==e[buf[i]].c; ++j);
int f=;
for(k=i; k<j; ++k)if(upd(e[buf[k]].v,((ll)dp[e[buf[k]].u]*+e[buf[k]].c)%mod))f=;
if(f)q.push(-);
}
}
}
int main() {
memset(hd,-,sizeof hd),ne=;
scanf("%d%d",&n,&m);
tot=n;
for(int i=; i<=m; ++i) {
int u,v;
scanf("%d%d",&u,&v);
int c=i;
if(c/) {
addedge(++tot,u,c%),addedge(++tot,v,c%),c/=;
for(; c/; c/=)++tot,addedge(tot,tot-,c%),++tot,addedge(tot,tot-,c%);
addedge(v,tot-,c),addedge(u,tot,c);
} else addedge(u,v,c),addedge(v,u,c);
}
bfs();
for(int i=; i<=n; ++i)printf("%d\n",dp[i]);
return ;
}
CodeForces - 1209F Koala and Notebook(拆边+BFS)的更多相关文章
- Codeforces 1209F. Koala and Notebook
传送门 考虑到达某个点时的数长度要尽量短,那么可以把边长看成此边十进制下的位数 那么对于最终答案我们只要考虑最短路 $DAG$ 上的情况 又发现其实边长都很小,所以可以暴力拆边,把边权都拆成 $1$, ...
- CF1207F Koala and Notebook(BFS)
你可能会好奇为什么只有一个 BFS 的标签,却还能够排到 F 的位置. 因为它实在是太 简 单 了 有更新 首先,比较两个数,可以先比较两个数的长度,然后比较两个数看成数字串后的字典序. 不妨先把每条 ...
- 1209F - Koala and Notebook
这场比赛没打,看同学fst了,于是来看看. 这道题看似简单,但是没想清楚细节真的不太行.像现在熬到十一点左右,脑子真的不行. 首先显然位数越小越好,因为每一位要比较,不如拆点.此时要拆成两条有向链(开 ...
- Codeforces Gym 100187E E. Two Labyrinths bfs
E. Two Labyrinths Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/prob ...
- CodeForces - 516B Drazil and Tiles(bfs)
https://vjudge.net/problem/CodeForces-516B 题意 在一个n*m图中放1*2或者2*1的长方形,问是否存在唯一的方法填满图中的‘.’ 分析 如果要有唯一的方案, ...
- CodeForces - 616C(很有意思的bfs,set,map的使用)
传送门: http://codeforces.com/problemset/problem/616/C C. The Labyrinth time limit per test 1 second me ...
- CodeForces - 580C Kefa and Park 【BFS】
题目链接 http://codeforces.com/problemset/problem/580/C 题意 根节点是 1 然后所有的叶子结点都是饭店 从根节点到叶子结点的路径上 如果存在 大于m 个 ...
- Codeforces 659F Polycarp and Hay【BFS】
有毒,自从上次选拔赛(哭哭)一个垃圾bfs写错之后,每次写bfs都要WA几发...好吧,其实也就这一次... 小白说的对,还是代码能力不足... 非常不足... 题目链接: http://codefo ...
- Codeforces 677D Vanya and Treasure 暴力+BFS
链接 Codeforces 677D Vanya and Treasure 题意 n*m中有p个type,经过了任意一个 type=i 的各自才能打开 type=i+1 的钥匙,最初有type=1的钥 ...
随机推荐
- 实验一 part2
#include <stdio.h> int main () { int x; printf("输入一个整数:\n"); scanf("%d",&a ...
- 【Python开发】Python PIL ImageDraw 和ImageFont模块学习
ImageDraw 新建一个空白图片为本文作示例,新建空白文件的方法 见Image模块,Image.new: mport Image blank = Image.new("RGB&quo ...
- 【VS开发】【DSP开发】地址对齐
组成原理说明------地址对齐 1.引入 1.1如下面的代码,定义了三个变量,int,char,int,并输出他们的十六进制的内存地址. #include<stdio.h> int ma ...
- vue组件添加事件@click.native
1,给vue组件绑定事件时候,必须加上native ,否则会认为监听的是来自Item组件自定义的事件 2,等同于在子组件中: 子组件内部处理click事件然后向外发送click事件:$emit(&q ...
- mybatis 基础(二) 动态sql 关于where if / where choose when otherwise
个人理解: where if就相当于正常的java中的if 语句,如果有多个条件组合判断的话用 and, or连接 而where choose when otherwise choose就好像是swi ...
- 初入JavaWeb(半成品)
2019-10-21 20:51:03 初次进行Javaweb的开发. 要求: 1登录账号:要求由6到12位字母.数字.下划线组成,只有字母可以开头:(1分) 2登录密码:要求显示“• ”或“*”表示 ...
- js中‘0’到底是 true 还是 false
if ('0') alert("'0' is true"); if ('0' == false) alert("'0' is false");结果是,两次都 ...
- [BZOJ1576] [BZOJ3694] [USACO2009Jan] 安全路径(最短路径+树链剖分)
[BZOJ1576] [BZOJ3694] [USACO2009Jan] 安全路径(最短路径+树链剖分) 题面 BZOJ1576和BZOJ3694几乎一模一样,只是BZOJ3694直接给出了最短路树 ...
- JavaScript更改css样式
来源:https://www.w3school.com.cn/js/js_htmldom_css.asp 1, document.getElementById(id).style.property = ...
- 我的python学习之旅——安装python
windows下载安装: 1.下载安装包: 访问官方网站:https://www.python.org/downloads/ 下载自己想要的版本安装,这里下载当前最新版3.8: 选择64位的Windo ...