P4568 [JLOI2011]飞行路线
思路
套路题
建出k+1分层图,从上一层走到下一层代表坐了一次免费航线,跑最短路即可
注意可能有情况不需要耗完所有k次机会,所以应从每层的终点向下一层终点连一条边权为0的边
代码
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
int u[4000100],v[4000100],w[4000100],fir[4000100],nxt[4000100],cnt,n,m,k,s,t,dis[4000100],vis[4000100];
struct QNode{
int dis,x;
bool operator < (const QNode &b) const{
return dis>b.dis;
}
};
priority_queue<QNode> q;
void addedge(int ui,int vi,int wi){
++cnt;
u[cnt]=ui;
v[cnt]=vi;
w[cnt]=wi;
nxt[cnt]=fir[ui];
fir[ui]=cnt;
}
void dij(int s){
memset(dis,0x3f,sizeof(dis));
memset(vis,0,sizeof(vis));
dis[s]=0;
q.push((QNode){0,s});
while(!q.empty()){
QNode u=q.top();
q.pop();
if(vis[u.x])
continue;
vis[u.x]=true;
for(int i=fir[u.x];i;i=nxt[i]){
if(dis[v[i]]>dis[u.x]+w[i]){
dis[v[i]]=dis[u.x]+w[i];
q.push((QNode){dis[v[i]],v[i]});
}
}
}
}
int main(){
scanf("%d %d %d",&n,&m,&k);
scanf("%d %d",&s,&t);
s++;
t++;
for(int i=1;i<=m;i++){
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
a++,b++;
for(int j=1;j<=k+1;j++){
addedge(a+(n*(j-1)),b+(n*(j-1)),c);
addedge(b+(n*(j-1)),a+(n*(j-1)),c);
}
for(int j=1;j<=k;j++){
addedge(a+(n*(j-1)),b+(n*(j)),0);
addedge(b+(n*(j-1)),a+(n*(j)),0);
}
}
for(int i=1;i<=k;i++)
addedge(t+(n*(i-1)),t+(n*i),0);
dij(s);
printf("%d\n",dis[t+k*n]);
return 0;
}
P4568 [JLOI2011]飞行路线的更多相关文章
- 洛谷 P4568 [JLOI2011]飞行路线 解题报告
P4568 [JLOI2011]飞行路线 题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在\(n\)个城市设有业务,设这些城市分别标记为0到\(n−1\ ...
- 洛谷 P4568 [JLOI2011]飞行路线 题解
P4568 [JLOI2011]飞行路线 题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在\(n\)个城市设有业务,设这些城市分别标记为\(0\)到\( ...
- 【luogu P4568 [JLOI2011]飞行路线】 题解
题目链接:https://www.luogu.org/problemnew/show/P4568 卡了一晚上,算是分层图最短路的模板.注意卡SPFA,所以我写了个SLF优化. 同时 AC400祭!~ ...
- luogu P4568 [JLOI2011]飞行路线
传送门 看到免费次数\(k\)最多只有10,可以考虑构建\(k+1\)层的分层图,即每一层正常连边,上下两层对应点连边权为0的单向边,最后对所有层里面的\(di_t\)取\(\max\)救星了 #in ...
- 洛谷 P4568 [JLOI2011]飞行路线
题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的 ...
- [洛谷P4568][JLOI2011]飞行路线
题目大意:最短路,可以有$k$条边无费用 题解:分层图最短路,建成$k$层,层与层之间的边费用为$0$ 卡点:空间计算出错,建边写错 C++ Code: #include <cstdio> ...
- P4568 [JLOI2011]飞行路线(分层图)
机房dalao推荐写的...(标签分层图) 经过前几题的分层图的洗礼,我深刻地体会到了分层图的优点和好处(主要是不想打dp....) 先说题吧.... 很明确,模型是最短路,但是,怎么跑k个,是个问题 ...
- P4568 [JLOI2011]飞行路线 分层图
题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在nn个城市设有业务,设这些城市分别标记为00到n-1n−1,一共有mm种航线,每种航线连接两个城市,并且 ...
- P4568 [JLOI2011]飞行路线 分层图最短路
思路:裸的分层图最短路 提交:1次 题解: 如思路 代码: #include<cstdio> #include<iostream> #include<cstring> ...
随机推荐
- Vue系列之 => 组件中的data和methods
使用data <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- Unicode字符需要几个字节来存储?
0)学习笔记: 我们常说的这句话“Unicode字符是2个字节”这句话有毛病 Unicode目前规划的总空间有17个平面, 0x0000---0x10FFFF,每个平面有 65536 个码点. Uni ...
- IO多路复用 IO异步
一.概念说明 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的环境给出的答案是不同的.所以先限定一下本文的环境.本文讨论的背景是Linux环境下的network I ...
- 算法提高 P0101
一个水分子的质量是3.0*10-23克,一夸脱水的质量是950克.写一个程序输入水的夸脱数n(0 <= n <= 1e10),然后输出水分子的总数.输入 109.43输出 3.465283 ...
- python02
# 字符串学习第二天 # 1.练习len与range for的使用 test=input("请输入") l=len(test) for i in range(0,l): print ...
- linux学习笔记---grep
先来讲讲grep(搜索过滤) 1.命令格式: grep [option] pattern file 2.命令参数: -a 不要忽略二进制的数据 -A<显示行数> 除了显示 ...
- 搭建ELK日志分析(亲测无毒!)截图没有附上。。凑合看。搭建出来没有问题
( 1 )安装 Logstash 依赖包 JDK Logstash 的运行依赖于 Java 运行环境, Logstash 1.5 以上版本不低于 java 7 推荐使用最新版本的 Java .由于我们 ...
- winform跨线程访问控件
首先说下,.net 2.0以后加强了安全机制,不允许在winform中直接跨线程访问控件的属性.所以除了控件所在的线程外的线程调用会抛异常 (Cross-thread operation not va ...
- mxnet下如何查看中间结果
https://blog.csdn.net/disen10/article/details/79376631 固定权重:https://www.cnblogs.com/chenyliang/p/678 ...
- 【gulp-sass】本地搭建sass开发环境
首先去官网下载一下nodejs. 然后安装gulp: 选择一个目录执行命令行:npm init,一直回车生成package.json文件 再执行命令:npm install gulp --save-d ...