P4568 飞行路线 分层图最短路

分层图最短路

问题模型

求最短路时,可有\(k\)次更改边权(减为0)

思路

在普通求\(Dijkstra\)基础上,\(dis[x][j]\)多开一维\(j\)以存已用了多少次机会,然后每次松弛时,做完普通松弛操作后,还要使用一次机会(如果可以),类同\(DP\)。

每次普通松弛:

\[ dis[to][j]=min\{dis[cur][j], dis[to][j]\} \]

如果还可以使用(\(j<k\)):

\[ dis[to][j+1] = min\{dis[cur][j], dis[to][j+1]\} \]

AC Code:

#include <cstdio>
#include <vector>
#include <cstring>
#include <queue>
#define MAXN 10010
#define MAXK 11
#define MIN(A,B) ((A)<(B)?(A):(B))
using namespace std;
int n,m,k,s,e;
bool vis[MAXN][MAXK];
struct edge{int v,w;edge(int v, int w):v(v),w(w){}
};
vector <edge> mp[MAXN];
struct item{int dis, k, v;item(int dis, int k, int v):dis(dis), k(k), v(v){}bool operator < (const item a) const{return dis > a.dis;}
};
int dis[MAXN][MAXK];
priority_queue <item> q;
void Dij(){memset(dis, 0x3f, sizeof(dis));dis[s][0]=0;q.push(item(0,0,s));while(!q.empty()){item cur = q.top();q.pop();if(vis[cur.v][cur.k]) continue;vis[cur.v][cur.k] = 1;for(register int i=0;i<mp[cur.v].size();++i){int v = mp[cur.v][i].v, w = mp[cur.v][i].w;if(cur.k<k&&!vis[v][cur.k+1]&&dis[v][cur.k+1]>dis[cur.v][cur.k]){ // 使用机会dis[v][cur.k+1] = dis[cur.v][cur.k];q.push(item(dis[v][cur.k+1], cur.k+1, v));}if(!vis[v][cur.k]&&dis[v][cur.k]>dis[cur.v][cur.k]+w){ // 普通松弛dis[v][cur.k] = dis[cur.v][cur.k]+w;q.push(item(dis[v][cur.k], cur.k, v));}}}
}
int main()
{scanf("%d %d %d %d %d", &n, &m, &k, &s, &e),s++,e++;for(int i=1;i<=m;++i){int a,b,c;scanf("%d %d %d", &a, &b, &c),++a,++b;mp[a].push_back(edge(b,c));mp[b].push_back(edge(a,c));}Dij();int ans=0x3ffffff;for(int i=0;i<=k;++i)ans = MIN(ans, dis[e][i]); // 遍历统计答案,机会不一定用完printf("%d", ans);return 0;
}

转载于:https://www.cnblogs.com/santiego/p/10803284.html

P4568 飞行路线 分层图最短路相关推荐

  1. 洛谷 - P4568 [JLOI2011]飞行路线(分层图最短路)

    题目链接:点击查看 题目大意:给出一张图,每条边都有权值,现在要求从点st到达点ed,沿途中可以让k条边的边权免费,现在求最短路 题目分析:分层图经典模板问题,直接套板子就行了,最后记得对于数组d的每 ...

  2. 图论 ---- E. Minimum Path(分层图最短路 用分层图对边权操作进行选择)

    题目链接 题目大意: 两点间最短路的定义变成:所有的边之和−max+min所有的边之和-max+min所有的边之和−max+min 解题思路: 这里很明显就是变成了最短路的时时候就是把路径上边权最小值 ...

  3. BZOJ2662[BeiJing wc2012]冻结——分层图最短路

    题目描述 "我要成为魔法少女!"      "那么,以灵魂为代价,你希望得到什么?"  "我要将有关魔法和奇迹的一切,封印于卡片之中„„"  ...

  4. 洛谷 - P4009 汽车加油行驶问题(分层图最短路/最小费用最大流)

    题目链接:点击查看 题目大意:给出一个n*n的矩阵表示道路,途中有一些加油站,现在要从点(1,1)到达点(n,n),问最小花费,其中的一些规则如下: 汽车只能沿着网格边行驶,装满油后可以行驶K条边,出 ...

  5. POJ - 3662 Telephone Lines(分层图最短路)

    题目链接:点击查看 题目大意:在郊区有N座通信基站,P条双向电缆,第i条电缆连接基站Ai和Bi.特别的,1号基站是通信公司的总站,N号基站位于一座农场中.现在,农场主希望对通信线路进行升级,其中升级第 ...

  6. codeforces1473 E.Minimum Path(分层图最短路)

    E - Minimum Path 分层图最短路 第一个分层图 第0层就是按照题中给的点连边,从第0层到第1层我们连一条边权是0的边,从第1层到第2层连一条边权是原先边权2倍的边,当然第1层以及第2层之 ...

  7. 【bzoj2834】回家的路 分层图最短路

    题目描述 输入 输出 样例输入 2 1 1 2 1 1 2 2 样例输出 5 题解 分层图最短路 dis[i][0]表示到i为横向时起点到i的最短路,dis[i][1]表示到i为纵向时起点到i的最短路 ...

  8. 【算法练习】CodeVs1391 伊吹萃香(分层图最短路)

    题意 在幻想乡,伊吹萃香是能够控制物体密度的鬼王.因为能够控制密度,所以萃香能够制造白洞和黑洞,并可以随时改变它们.某一天萃香闲着无聊,在妖怪之山上设置了一些白洞或黑洞,由于引力的影响,给妖怪们带来了 ...

  9. Loj#6223 Luogu P4009 汽车加油行驶 分层图最短路

    这是本蒟蒻博客的第一篇文章,不规范之处敬请各位大佬指正和谅解orz Loj#6223+Luogu P4009 文章目录 前言 一.建模 二.代码实现 1.节点在图中的编号(分层图的存储) 2.建边 对 ...

  10. HDU 5669 Road(线段树建树)(分层图最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5669 [分析]线段树建树+分层图最短路 #include <cstdio> #includ ...

最新文章

  1. LeetCode 239. Sliding Window Maximum
  2. jzoj4012-Distinct Paths【搜索】
  3. 麻省理工、微软为AI量身打造了一套leetcode编程题
  4. bandizip专业版
  5. mysql limit分页查询效率
  6. 商汤科技20篇论文入选ICCV 2017,披露最新研究主线
  7. 数字信号处理《数字滤波器的MATLAB与FPGA实现》
  8. 计算机无法安装64位操作系统,彻底根除“无法安装64位版本的Office,因为在您的PC上找到了以下32位程序:”的问题-网络教程与技术 -亦是美网络...
  9. import torch报错画图问题Matplotlib created a temporary config/cache directory at /tmp/matplotl
  10. Vuforia入门之简单图片识别案例(一)
  11. imx6上调用 vpu
  12. 讲解后台管理系统之列表设计分享
  13. 【Java用法】@NotEmpty、@NotBlank、@NotNull注解的使用方法与区别
  14. 核心单词 Word List 1
  15. OpenWrt之配置无线中继(基于新三mt7621)
  16. Python | 分析txt文档特定词汇的词频,以《天龙八部》为例
  17. 轻松搞定表白女朋友:Android版APP (零基础也可直接下载软件)
  18. 爬虫day05 动态网站爬取,json模块 selenium , phantomjs , BeautifulSoup
  19. 在网页中显示高亮的代码块
  20. 超详细!关于万能头文件<bits/stdc++.h>的细节

热门文章

  1. 小米笔记本装linux教程视频教程,Archlinux安装指南~小米笔记本Air 13.3英寸版本
  2. 仅此一文带您走入智能叮当的世界
  3. 免费好用的证件扫描仪-扫描全能王
  4. mac开机启动项怎么设置
  5. (一)外显子组数据分析之软件安装大全
  6. 动态图snapshot构建
  7. okhttp3+retrofit2+rxjava2使用
  8. redis基础篇——数据一致性
  9. 如何让div靠右_如何实现CSS右对齐
  10. 甲骨文裁员900多人,赔偿N+6,有人获赔100万,被裁也能致富?