[JLOI2011]飞行路线题解
题目描述
Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的价格。Alice和Bob现在要从一个城市沿着航线到达另一个城市,途中可以进行转机。航空公司对他们这次旅行也推出优惠,他们可以免费在最多k种航线上搭乘飞机。那么Alice和Bob这次出行最少花费多少?
输入格式
数据的第一行有三个整数,n,m,k,分别表示城市数,航线数和免费乘坐次数。
第二行有两个整数,s,t,分别表示他们出行的起点城市编号和终点城市编号。(0<=s,t<n)
接下来有m行,每行三个整数,a,b,c,表示存在一种航线,能从城市a到达城市b,或从城市b到达城市a,价格为c。(0<=a,b<n,a与b不相等,0<=c<=1000)
输出格式
只有一行,包含一个整数,为最少花费。
样例
样例输入
5 6 1
0 4
0 1 5
1 2 5
2 3 5
3 4 5
2 3 3
0 2 100
样例输出
8
数据范围与提示
对于30%的数据,2<=n<=50,1<=m<=300,k=0;
对于50%的数据,2<=n<=600,1<=m<=6000,0<=k<=1;
对于100%的数据,2<=n<=10000,1<=m<=50000,0<=k<=10.
题解
乍一看,哇塞,这不是分层图最短路的板子吗???
又一看,哇塞,不会打分层图
于是采取其它的方法;
仔细一看,可以DP呀!!!
对于定义dp[i][j],表示第i点到源点使用了j次免费机会的最短路径;
那么到达dp[i][j]的方式有两种
- 由i所连接的点直接到达i;
- 由i所连接的点使用一次免费后到达i;
所以dp[i][j]=min(dp[v][j-1],dp[v][j]+w)
其中,v为所有连接i的店,w为其边权;
代码
#include<bits/stdc++.h>
using namespace std;
struct zz{
int u,w,k;
};
bool operator <(zz a,zz b){
return a.w>b.w;
}
vector<zz> v[10005];
int dp[10005][15];
bool f[10005][15];
int n,m,tot;
void Dijkstra(int st,int ed){
memset(dp,0x3f,sizeof dp);
dp[st][0]=0;
priority_queue<zz> q;
q.push(zz{st,0,0});
while(q.size()){
zz now;
now=q.top();
int nowk=now.k;
int nowans=now.w;
int u=now.u;
q.pop();
if(f[u][nowk])
continue;
f[u][nowk]=1;
for(int i=0;i<v[u].size();i++){
int u1=v[u][i].u;
int w=v[u][i].w;
if(dp[u1][nowk]>dp[u][nowk]+w&&!f[u1][nowk]){
dp[u1][nowk]=dp[u][nowk]+w;
q.push(zz{u1,dp[u1][nowk],nowk});
}
if(nowk+1<=tot){
if(dp[u1][nowk+1]>dp[u][nowk]&&!f[u1][nowk+1]){
dp[u1][nowk+1]=dp[u][nowk];
q.push(zz{u1,dp[u1][nowk+1],nowk+1});
}
}
}
}
int Min=0x3f3f3f3f;
for(int i=0;i<=tot;i++){
Min=min(Min,dp[ed][i]);
//printf("%d %d %d\n",ed,i,dp[ed][i]);
}
printf("%d",Min);
}
int main(){
int st,ed;
scanf("%d%d%d",&n,&m,&tot);
scanf("%d%d",&st,&ed);
for(int i=1;i<=m;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
v[x].push_back(zz{y,z,0});
v[y].push_back(zz{x,z,0});
}
Dijkstra(st,ed);
return 0;
}
[JLOI2011]飞行路线题解的更多相关文章
- [JLOI2011]飞行路线 题解
[JLOI2011]飞行路线 题解 题目TP门 题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有 ...
- 洛谷 P4568 [JLOI2011]飞行路线 题解
P4568 [JLOI2011]飞行路线 题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在\(n\)个城市设有业务,设这些城市分别标记为\(0\)到\( ...
- 题解 P4568 【[JLOI2011]飞行路线】
P4568 [JLOI2011]飞行路线 分层图模板题,相似的题还有P4822 [BJWC2012]冻结,P2939 [USACO09FEB]改造路Revamping Trails,其实做惯了也就不难 ...
- BZOJ 2763: [JLOI2011]飞行路线 最短路
2763: [JLOI2011]飞行路线 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
- Bzoj 2763: [JLOI2011]飞行路线 dijkstra,堆,最短路,分层图
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1728 Solved: 649[Submit][Statu ...
- Bzoj 2763: [JLOI2011]飞行路线 拆点,分层图,最短路,SPFA
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1694 Solved: 635[Submit][Statu ...
- [JLOI2011]飞行路线 不同的算法,不同的悲伤
题目 :BZOJ2763 洛谷P4568 [JLOI2011]飞行路线 一道最短路的题目,想想写个题解也不错(好久没写题解了_(:з」∠)_) 然后这道题中心思路是dijikstra处理最短路,所以没 ...
- [JLOI2011]飞行路线(分层图)
[JLOI2011]飞行路线 题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在 n 个城市设有业务,设这些城市分别标记为 0 到 n−1 ,一共有 m ...
- BZOJ2763[JLOI2011]飞行路线 [分层图最短路]
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2523 Solved: 946[Submit][Statu ...
随机推荐
- 用python输出未来时间,递增
输入当前时间,之前与之后的365天时间日期 按格式化输出 #!/usr/bin/evn python # -*- coding: UTF-8 -*- # import time import date ...
- IEEE754标准
以下计算按规格化规定: S:符号位 M:分数值 E:指数偏移值 单精度浮点数(32bit): NUM_single = (-1)^S * 1.M * 2^(E-127) 双精度浮点数(64b ...
- cat ~/.bash_history
7.history命令 history命令用于显示历史执行过的命令,格式为"history [-c]". history命令应该是作者最喜欢的命令.执行history命令能显示出当 ...
- ubuntu中安装visual studio code-(转载)
在Ubuntu中安装Visual Studio Code 编译自:http://itsfoss.com/install-visual-studio-code-ubuntu/ 作者: Abhishek ...
- MyBatis 单表CURD操作(五)
MyBatis的CURD操作 添加CURD接口方法 package mapper; import entity.UserEntity; import org.apache.ibatis.annotat ...
- 安全漏洞扫描工具 burpsuite V1.7.32 资料
安装包下载地址:http://www.downxia.com/downinfo/229728.html 实战教程:https://t0data.gitbooks.io/burpsuite/conten ...
- tkinter是内置的模块,不同的版本的导入形式不同,现总结如下
#coding=utf-8 import os, sys try: from tkinter import * except ImportError: #Python 2.x PythonVersio ...
- .NET6系列:Visual Studio 2022 线路图
系列目录 [已更新最新开发文章,点击查看详细] 在上一篇博客<Visual Studio 2022>中介绍了VS2022的性能改进与重要功能.本文主要介绍在 Visual Stud ...
- webpack(2)--webapck自身的配置
上一记介绍了webpack的安装和基本配置,本记将描述webpack自身的配置 一:指定webpack入口以及出口目录以及输出文件 相信读者在看完上一记后会有一点疑惑:为什么运行webpack要配置s ...
- 【SpringBoot基础系列】手把手实现国际化支持实例开发
[SpringBoot基础系列]手把手实现国际化支持实例开发 国际化的支持,对于app开发的小伙伴来说应该比价常见了:作为java后端的小伙伴,一般来讲接触国际化的机会不太多,毕竟业务开展到海外的企业 ...