题目描述###

Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的价格。

Alice和Bob现在要从一个城市沿着航线到达另一个城市,途中可以进行转机。航空公司对他们这次旅行也推出优惠,他们可以免费在最多k种航线上搭乘飞机。那么Alice和Bob这次出行最少花费多少?

输入输出格式

输入格式:

数据的第一行有三个整数,n,m,k,分别表示城市数,航线数和免费乘坐次数。

第二行有两个整数,s,t,分别表示他们出行的起点城市编号和终点城市编号。

接下来有m行,每行三个整数,a,b,c,表示存在一种航线,能从城市a到达城市b,或从城市b到达城市a,价格为c。

输出格式:

只有一行,包含一个整数,为最少花费。

输入输出样例

输入样例#1:

5 6 1

0 4

0 1 5

1 2 5

2 3 5

3 4 5

2 3 3

0 2 100

输出样例#1:

8

题解###

简单的最短路+dp 我竟然没有一遍切

dp[i][j]表示到编号为i时,用了j次免费机会的最少花费

转移十分显然

Code###

#include<bits/stdc++.h>
#define LL long long
#define RG register
using namespace std; inline int gi() {
int f = 1, s = 0;
char c = getchar();
while (c != '-' && (c < '0' || c > '9')) c = getchar();
if (c == '-') f = -1, c = getchar();
while (c >= '0' && c <= '9') s = s*10+c-'0', c = getchar();
return f == 1 ? s : -s;
} const int N = 10010, M = 50010; struct node {
int to, next, w;
}g[M<<1];
int last[N], gl;
inline void add(int z, int y, int x) {
g[++gl] = (node) {y, last[x], z};
last[x] = gl;
g[++gl] = (node) {x, last[y], z};
last[y] = gl;
return ;
} queue<int> q;
int f[N][15];
bool vis[N];
int main() {
int n = gi(), m = gi(), k = gi(), s = gi(), t = gi();
for (int i = 1; i <= m; i++) add(gi(), gi(), gi());
q.push(s);
memset(f, 127/3, sizeof(f));
f[s][0] = 0;
while (!q.empty()) {
int u = q.front();
q.pop();
for (int i = last[u]; i; i = g[i].next) {
int v = g[i].to;
for (int j = 0; j <= k; j++) {
if (j > 0 && f[v][j] > f[u][j-1]) {
f[v][j] = f[u][j-1];
if (!vis[v]) q.push(v), vis[v] = 1;
}
if (f[u][j] + g[i].w < f[v][j]) {
f[v][j] = f[u][j] + g[i].w;
if (!vis[v]) q.push(v), vis[v] = 1;
}
}
}
vis[u] = 0;
}
int ans = 2147483647;
for (int i = 0; i <= k; i++)
ans = min(ans, f[t][i]);
printf("%d\n", ans);
return 0;
}

洛谷 P4568 [JLOI2011]飞行路线的更多相关文章

  1. 洛谷 P4568 [JLOI2011]飞行路线 解题报告

    P4568 [JLOI2011]飞行路线 题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在\(n\)个城市设有业务,设这些城市分别标记为0到\(n−1\ ...

  2. 洛谷 P4568 [JLOI2011]飞行路线 题解

    P4568 [JLOI2011]飞行路线 题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在\(n\)个城市设有业务,设这些城市分别标记为\(0\)到\( ...

  3. [洛谷P4568][JLOI2011]飞行路线

    题目大意:最短路,可以有$k$条边无费用 题解:分层图最短路,建成$k$层,层与层之间的边费用为$0$ 卡点:空间计算出错,建边写错 C++ Code: #include <cstdio> ...

  4. 洛谷 4568 [JLOI2011] 飞行路线

    题目戳这里 一句话题意: 有n个点,m条边的有向图,最多可以把k条边变为0,求从起点到终点最短距离. Solution 首先看到这题目,感觉贼难,看起来像DP,貌似也有大佬这么做,但鉴于本蒟蒻思维能力 ...

  5. 【洛谷P4568】[JLOI2011]飞行路线

    飞行路线 题目链接 今天上午模拟考试考了原题,然而数组开小了,爆了4个点. 据王♂强dalao说这是一道分层图SPFA的裸题 dis[i][j]表示到点i用k个医疗包的最小消耗,dis[u][j]+e ...

  6. 【洛谷 P4568】 [JLOI2011]飞行路线 (分层最短路)

    题目链接 分层图最短路. 把每个点拆成\(k+1\)个点,表示总共有\(k+1\)层. 然后每层正常连边, 若\((u,v)\)有边,则把每一层的\(u\)和下一层的\(v\).每一层的\(v\)和下 ...

  7. 洛谷P4568 飞行路线

    题目描述 \(Alice\)和\(Bob\)现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在\(n\)个城市设有业务,设这些城市分别标记为\(0\)到\(n−1\),一共有\(m\ ...

  8. 【luogu P4568 [JLOI2011]飞行路线】 题解

    题目链接:https://www.luogu.org/problemnew/show/P4568 卡了一晚上,算是分层图最短路的模板.注意卡SPFA,所以我写了个SLF优化. 同时 AC400祭!~ ...

  9. luogu P4568 [JLOI2011]飞行路线

    传送门 看到免费次数\(k\)最多只有10,可以考虑构建\(k+1\)层的分层图,即每一层正常连边,上下两层对应点连边权为0的单向边,最后对所有层里面的\(di_t\)取\(\max\)救星了 #in ...

随机推荐

  1. Lambda02 函数式接口

    1 java8默认提供的函数式接口 1.1 Predicate /* * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rig ...

  2. Win10系统优化/设置脚本

    Win10系统优化/设置脚本 用了很长时间win10了,用的过程中,发现了一些问题,关于系统基本的优化,和个人的使用习惯设置等等,做成了一个脚本,可以一键设置win10的系统设置,结合DWS对Win1 ...

  3. lucene 第二天

    Lucene/Solr   第二天 1. 课程计划 Lucene的Field Lucene的索引库维护 lucene的查询 a) Query子对象 b) QueryParser Lucene相关度排序 ...

  4. 权限管理RBAC

    四张表: 1.module:id/name //模块 2.action:id /module_id/name //权限 3.user:id/name //用户表 4.group:id/user_id ...

  5. oracle获取表和列的备注

    using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Runti ...

  6. C# DateTime.ToString()的各种日期格式

    DateTime.ToString()的各种日期格式 例: ToString:2016/9/27 0:00:00 ToString("yyyy/MM/dd"):2016/09/27 ...

  7. Struts2 校验数据问题

    我们会经常遇到一下问题,例如我在前端输入数据,把数据发送到和后台,我首先要校验这个数据, 比如说:前端必须输入一个日期类型的数据,后端才能正确接收,要是输入一个不是日期型的数据, 那么后端就要把数据打 ...

  8. c++基础之引用reference

    1.何为引用 简单来说就是,比如你换了个新名字,用新名字叫你,你也会答应 2.引用vs指针 -引用没有null,好比你说你换了个新名字,但是新名字是啥总得有点东西 -一旦引用被初始化后就不可以指到另外 ...

  9. Func和Action的介绍及其用法

    Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate,Func位于System.Core命名空间下,使用委托可以提升效率,例如在反射中使用就可以弥补反射所损失的性能. ...

  10. 用ActionBar的ActionProvider的时候报错:cannot be cast to android.view.ActionProvider

    在用ActionBar的自定义ActionProvider的时候有时候会遇到以下的报错: