HYSBZ - 2763 飞行路线(分层图最短路线)
题目:
Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的价格。Alice和Bob现在要从一个城市沿着航线到达另一个城市,途中可以进行转机。航空公司对他们这次旅行也推出优惠,他们可以免费在最多k种航线上搭乘飞机。那么Alice和Bob这次出行最少花费多少?
思路:
典型的分层图求最短路问题,这类问题一般适用于我们要对图中的某些边的权进行变换的情况,当然变换的次数要很小才行。
d[u][j]表示到达u点已经免费乘坐了j次航线的最短距离。在套一个裸的迪杰斯特拉算法就可以了。
代码:
- //#include <bits/stdc++.h>
- #include <cstdio>
- #include <cstring>
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <queue>
- #define MAX 1000000000
- #define inf 0x3f3f3f3f
- #define FRE() freopen("in.txt","r",stdin)
- using namespace std;
- typedef long long ll;
- const int maxn = ;
- int n,m,k,s,t;
- int d[maxn][];
- struct Edge
- {
- int to,c;
- };
- vector<Edge> mp[maxn];
- struct Node
- {
- int u,k,d;
- bool operator<(const Node& rhs)const{
- return d>rhs.d;
- }
- };
- void Dij()
- {
- for(int i=; i<=k; i++) d[s][i] = ;
- priority_queue<Node> que;
- que.push(Node{s,,});
- while(!que.empty())
- {
- Node u = que.top();
- que.pop();
- if(u.d>d[u.u][u.k]) continue;
- for(int i=; i<mp[u.u].size(); i++)
- {
- Edge e = mp[u.u][i];//可以将这里的分层图看做是dp来理解
- if(u.d+e.c<d[e.to][u.k])//不乘坐免费的情况
- {
- d[e.to][u.k] = u.d+e.c;
- que.push(Node{e.to,u.k,u.d+e.c});
- }
- if(u.k+<=k && d[e.to][u.k+]>d[u.u][u.k])//免费乘坐的情况
- {
- d[e.to][u.k+] = d[u.u][u.k];
- que.push(Node{e.to,u.k+,d[u.u][u.k]});
- }
- }
- }
- return ;
- }
- int main()
- {
- //FRE();
- memset(d,inf,sizeof(d));
- scanf("%d%d%d",&n,&m,&k);
- scanf("%d%d",&s,&t);
- for(int i=; i<m; i++)
- {
- int u,v,c;
- scanf("%d%d%d",&u,&v,&c);
- mp[u].push_back(Edge{v,c});
- mp[v].push_back(Edge{u,c});
- }
- Dij();
- int ans = inf;
- for(int i=; i<=k; i++)
- {
- ans = min(ans,d[t][i]);
- }
- printf("%d\n",ans);
- return ;
- }
HYSBZ - 2763 飞行路线(分层图最短路线)的更多相关文章
- bzoj2763 [JLOI]飞行路线 分层图最短路
问题描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的 ...
- bzoj2763 [JLOI2011]飞行路线——分层图
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2763 构建分层图. 代码如下: 写法1(空间略大)(时间很慢): #include<i ...
- P4568 飞行路线 分层图最短路
P4568 飞行路线 分层图最短路 分层图最短路 问题模型 求最短路时,可有\(k\)次更改边权(减为0) 思路 在普通求\(Dijkstra\)基础上,\(dis[x][j]\)多开一维\(j\)以 ...
- bzoj 2763 [JLOI2011]飞行路线——分层图
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2763 分层图两种方法的练习. 1.把图分成k+1层,本层去上面一层的边免费.但空间时间都不算 ...
- bzoj2763: [JLOI2011]飞行路线(分层图spfa)
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3234 Solved: 1235[Submit][Stat ...
- [JLOI2011]飞行路线 分层图最短路
题目描述: Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在nn个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一 ...
- [BZOJ2963][JLOI2011]飞行路线 分层图+spfa
Description Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并 ...
- BZOJ2763: [JLOI2011]飞行路线(分层图 最短路)
题意 题目链接 Sol 分层图+最短路 建\(k+1\)层图,对于边\((u, v, w)\),首先在本层内连边权为\(w\)的无向边,再各向下一层对应的节点连边权为\(0\)的有向边 如果是取最大最 ...
- 【bzoj2763】[JLOI2011]飞行路线 分层图最短路
题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的 ...
随机推荐
- Windows NT/NTLM 加密
Hash,一般翻译为“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是散 ...
- Ruby Time类和Date类
Time类 更新: 2017/06/23 更新了Data/Time在model模式下的便利方法 更新: 2018/10/12 修改了%Y相关描述防止误解 年月日时分秒,时区 生成 获取当前时 ...
- idea 设置项目编码
目前我了解的设置idea编码有两种形式(但深层次不太了解) 方式一: 这个方式需要你点击要设置编码单个文件,选择编码.一次只能修改一个文件编码 方式二: 一般工作时使用这个方式,文件编码,选择项目文件 ...
- 初窥MySQL性能调优
本文涉及:MySQL自带的性能测试工具mysqlslap的使用及几个性能调优的方法 性能测试工具—mysqlslap mysqlslap是MySQL自带的一款非常优秀的性能测试工具.使用它可以 模拟多 ...
- C#模版学习研究
原文链接1 原文链接2 using System; using System.Collections.Generic; using System.Text; using T = System.By ...
- http缓存之lastModified和etag
1.cache-control 访问资源 首次访问页面时间:2018.2.1 9:56 (当前时间=GMT时间+8h) 缓存时长max-age:1 day Expire缓存失效时间:2018.2. ...
- IOS应用开发版本控制工具之Versions使用,iosversions
Versions版本控制工具破解版(Versions.zip)下载请见本博文附件.下载后在MAC安装完以后,图标是莲花状.见下图: 双击运行如下图: 点击Repository,连接SVN服务器R ...
- oracle如何实现函数、包、存储过程加密
首先创建一个名称为test1.sql的文件: CREATE OR REPLACE FUNCTION get_date_string RETURN VARCHAR2 AS BEGIN RETURN TO ...
- 189 Rotate Array 旋转数组
将包含 n 个元素的数组向右旋转 k 步.例如,如果 n = 7 , k = 3,给定数组 [1,2,3,4,5,6,7] ,向右旋转后的结果为 [5,6,7,1,2,3,4].注意:尽可能找 ...
- (四)SpringIoc之Bean装配
在pom.xml的依赖 <dependencies> <!--测试包--> <dependency> <groupId>junit</groupI ...