[BZOJ2963][JLOI2011]飞行路线 分层图+spfa
Description
Input
Output
Sample Input
0 4
0 1 5
1 2 5
2 3 5
3 4 5
2 3 3
0 2 100
Sample Output
HINT
对于50%的数据,2<=n<=600,1<=m<=6000,0<=k<=1;
对于100%的数据,2<=n<=10000,1<=m<=50000,0<=k<=10.
Solution
做法:分层图+$spfa$
大概是叫分层图吧...感觉和$dp$一个样子
就是给$dis$数组多一个属性:用了多少次免费
更新的时候多$for$一遍更新整个$dis$数组就行了
两种转移:
$dis[v][k]=min(dis[v][k],d[u][k]+e[i].v)$
$dis[v][k]=min(dis[v][k],dis[u][k-1])$
$k$表示目前一共用了$k$次免费次数
然后直接跑一遍$spfa$就行了,$k<=10$,$spfa$的常数大了十倍。不过能过就是了
还有就是注意队列用下循环队列,不然空间爆炸
#include <bits/stdc++.h> using namespace std ; #define N 1000010
#define inf 0x3f3f3f3f int n , m , k , s , t ;
int cnt , head[ N ] ;
int q[ N ] , d[ N ][ ] ;
bool vis[ N ] ;
struct node {
int to , nxt , v ;
}e[ N ] ; void ins( int u , int v , int w ) {
e[ ++ cnt ].to = v ;
e[ cnt ].nxt = head[ u ] ;
e[ cnt ].v = w ;
head[ u ] = cnt ;
} void spfa() {
memset( d , 0x3f , sizeof( d ) ) ;
for( int i = ; i <= k ; i ++ ) d[ s ][ i ] = ;
q[ ] = s ;vis[ s ] = ;
int l = , r = ;
while( l != r ) {
int u = q[ l ++ ] ;
vis[ u ] = ;
if( l == ) l = ;
for( int i = head[ u ] ; i ; i = e[ i ].nxt ) {
int v = e[ i ].to ,now = ;
for( int j = ; j <= k ; j ++ ) {
if( !j ) now = d[ u ][ j ] + e[ i ].v ;
else now = min( d[ u ][ j - ] , d[ u ][ j ] + e[ i ].v ) ;
if( d[ v ][ j ] > now ) {
d[ v ][ j ] = now ;
if( !vis[ v ] ) vis[ v ] = , q[ r ++ ] = v ;
if( r == ) r = ;
}
}
}
}
} int main() {
scanf( "%d%d%d%d%d" , &n , &m , &k , &s , &t ) ;
s ++ ; t ++ ;
for( int i = ; i <= m ; i ++ ) {
int u , v , w ;
scanf( "%d%d%d" , &u , &v , &w ) ;
u ++ , v ++ ;
ins( u , v , w ) ;
ins( v , u , w ) ;
}
spfa() ;
int ans = inf ;
for( int i = ; i <= k ; i ++ ) {
ans = min( ans , d[ t ][ i ] ) ;
}
printf( "%d\n" , ans ) ;
return ;
}
[BZOJ2963][JLOI2011]飞行路线 分层图+spfa的更多相关文章
- bzoj2763: [JLOI2011]飞行路线(分层图spfa)
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3234 Solved: 1235[Submit][Stat ...
- 【bzoj2763】[JLOI2011]飞行路线 分层图最短路
题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的 ...
- bzoj 2763: [JLOI2011]飞行路线 -- 分层图最短路
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MB Description Alice和Bob现在要乘飞机旅行,他们选择了一家相 ...
- bzoj 2763 [JLOI2011]飞行路线——分层图
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2763 分层图两种方法的练习. 1.把图分成k+1层,本层去上面一层的边免费.但空间时间都不算 ...
- [JLOI2011]飞行路线 分层图最短路
题目描述: Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在nn个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一 ...
- P4568 [JLOI2011]飞行路线 分层图
题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在nn个城市设有业务,设这些城市分别标记为00到n-1n−1,一共有mm种航线,每种航线连接两个城市,并且 ...
- BZOJ2763[JLOI2011]飞行路线 [分层图最短路]
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2523 Solved: 946[Submit][Statu ...
- BZOJ2763: [JLOI2011]飞行路线(分层图 最短路)
题意 题目链接 Sol 分层图+最短路 建\(k+1\)层图,对于边\((u, v, w)\),首先在本层内连边权为\(w\)的无向边,再各向下一层对应的节点连边权为\(0\)的有向边 如果是取最大最 ...
- bzoj2763 [JLOI2011]飞行路线——分层图
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2763 构建分层图. 代码如下: 写法1(空间略大)(时间很慢): #include<i ...
随机推荐
- git vim 编辑器基本操作
用 git 命令行提交文件时,默认使用 vim 编辑器,基本操作: 按 a, i 或 o 进入编辑模式 按 ESC 进入操作模式 在操作模式下,:wq 为写入退出,:q! 不保存退出
- Loadrunner解决启动浏览器后页面显示空白
Loadrunner解决启动浏览器后页面显示空白 2018年5月20日,今天照常打开Loadrunner准备学习,在录制的时候却出现了一个问题,浏览器可以启动,但是程序页面缺是加载不出来,主要症状体现 ...
- Shell初学(三)传参
一. 脚本代码:test.sh echo "Shell 传递参数实例!"; echo "执行的文件名:$0"; echo "第一个参数为:$1&quo ...
- VUE 使用之:nextTick
<div class="app"> <div ref="msgDiv">{{msg}}</div> <div v-if ...
- PHP + Ajax处理大数据查询并导出Excel
思路:使用ajax多次请求服务器,分段生成多个Excel,然后打包压缩成zip,超链接指向下载的文件然后下载. [HTML部分] <input type="button" v ...
- IDA 7.0在Mojava更新后打不开的问题
Mac升级到mojava后,ida 7.0打不开了. 上述是两种典型的窗口,不过不论是出现什么样的弹窗,如果是在升级之后出现的,都要试一下下面的解决办法.因为IDA7.0版本流出的比较多,虽然这个已经 ...
- localhost和本机IP和127.0.0.1之间的区别
参考出处:https://www.zhihu.com/question/23940717 localhost 是个域名,不是地址,它可以被配置为任意的 IP 地址,不过通常情况下都指向 127.0.0 ...
- VUE滚动条插件——vue-happy-scroll
最近自己在自学vue2.0,然后就自己摸索做一个简单的后台管理系统,在做的过程中,总感觉不同浏览器自带的滚动条样式不统一,也很难看,所以就在网上找一些使用vue的滚动条插件.最开始用的是Easy-sc ...
- linux locate
locate命令查找文件比find速度快很多,locate是在linux下实现快速查找文件的工具.相应的windows下有everything功能也很强大. [root@wuzhigang lib]# ...
- tensorflow显存管理
在运行上面的blog的Tensorflow小程序的时候程序我们会遇到一个问题,当然这个问题不影响我们实际的结果计算,但是会给同样使用这台计算机的人带来麻烦,程序会自动调用所有能调用到的资源,并且全占满 ...