853. 有边数限制的最短路(bellman_ford算法)
给定一个 nn 个点 mm 条边的有向图,图中可能存在重边和自环, 边权可能为负数。
请你求出从 11 号点到 nn 号点的最多经过 kk 条边的最短距离,如果无法从 11 号点走到 nn 号点,输出 impossible
。
注意:图中可能 存在负权回路 。
输入格式
第一行包含三个整数 n,m,kn,m,k。
接下来 mm 行,每行包含三个整数 x,y,zx,y,z,表示存在一条从点 xx 到点 yy 的有向边,边长为 zz。
点的编号为 1∼n1∼n。
输出格式
输出一个整数,表示从 11 号点到 nn 号点的最多经过 kk 条边的最短距离。
如果不存在满足条件的路径,则输出 impossible
。
数据范围
1≤n,k≤5001≤n,k≤500,
1≤m≤100001≤m≤10000,
1≤x,y≤n1≤x,y≤n,
任意边长的绝对值不超过 1000010000。
输入样例:
3 3 1
1 2 1
2 3 1
1 3 3
输出样例:
3
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 510,M=10010;
int n,m,k;
int dist[N],last[N];
struct Edge{
int a,b,w;
}edges[M];
void bellman_ford()
{
memset(dist,0x3f,sizeof dist);
dist[1]=0;
for(int i=0;i<k;i++)
{
memcpy(last,dist,sizeof dist);
for(int j=0;j<m;j++)
{
auto e=edges[j];
dist[e.b]=min(dist[e.b],last[e.a]+e.w);
}
}
}
int main()
{
scanf("%d%d%d", &n, &m,&k);
for(int i=0;i<m;i++)
{
int a,b,w;
scanf("%d%d%d", &a, &b,&w);
edges[i]={a,b,w};
}
bellman_ford();
if(dist[n]>0x3f3f3f3f/2)puts("impossible");
else printf("%d\n",dist[n]);
return 0;
}
853. 有边数限制的最短路(bellman_ford算法)相关推荐
- AcWing 853. 有边数限制的最短路(bellman的k边限制最短路)
题目链接 https://www.acwing.com/problem/content/855/ 思路 思路其实利用了bellman_ford算法的特点,之前还没注意过,我们在第一层循环限制每个点可以 ...
- 备战蓝桥杯—有边数限制的最短路 (bellman_ford+)——[AcWing]有边数限制的最短路
因为近期在学图,所以顺带的写一篇最短路的备战蓝桥杯文章. 最短路(单源) 所有边权都为正数有两种算法: 1.朴素Dijkstra O(n^2) 2.堆优化的Dijkstra O(mlogn ...
- BELLMAN-FORD算法 求有边数限制的最短路
这个算法也是紧承我们之前讲过的关于图论的内容,我们在前面分析图的时候说过了对于不同的图论问题,我们会有不同的求解方法,那么这里我们讲到Bellman-Ford算法是用于解决有边数限制的求解最短路问题. ...
- 算法百题斩其三: 单源最短路与算法——其一
算法百题斩其三: 单源最短路与算法--其一 写在前面:何所谓"斩"? 斩,即快速而有力地切断,指我们用最精简的语言,一针见血地点破算法题的核心难点.斩需三思而后行:斩需借助外力.旁 ...
- Bellman_Ford算法
Bellman_Ford算法和Dijkstra算法都可以用来求解有向图的单源最短路径问题,但是,相比于Dijkstra算法, Bellman_Ford算法允许边的权重为负值. 算法的详细讨论见算法导论 ...
- 单源最短路 Dijkstra算法 和 SPFA算法
单源最短路 •从一个点出发,到达其他顶点的最短路径的长度. •基本操作:松弛 •d[u]+map[u, v]< d[v]这样的边(u,v)称为紧的(tense),可以对它进行松弛(relax): ...
- 图论-最短路Dijkstra算法详解超详 有图解
整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...
- 含有负边的图的最短路径(Bellman_ford算法)
更新所有的边,每条边更新V-1次,时间复杂度为O(V*E). 有些更新操作是重复了的,这里可以考虑检查多余的重复操作作,如果没有更新发生,则立即终止算法. #include<iostream&g ...
- Remmarguts' Date(POJ2449+最短路+A*算法)
题目链接:http://poj.org/problem?id=2449 题目: 题意:求有向图两点间的k短路. 思路:最短路+A*算法 代码实现如下: 1 #include <set> 2 ...
最新文章
- 检索数据表中重复的记录
- 关于bat的变量赋值和解析机制
- 实现Web虚拟现实的最轻松方案—A-Frame框架
- jQuery的ajax的post请求json格式无法上传空数组
- pandas 在某个列表中的值 筛选列_Pandas学习笔记(二)
- ELK详解(二十四)——geoip画访问地域热图
- 软件工程--结对第二次作业
- Spring Cloud Gateway替代zuul作为API网关(一)
- 程序员大神常用软件:mybase,一款个人知识笔记管理神器
- “CSIG 计算机视觉前沿 · 研讨会”于6月28日在百度举行
- 老板要如何去激励自己的员工?
- python gil全局锁_什么是Python全局解释器锁(GIL)?
- GitHub个人主页默认模板
- spark:开发本地测试的wordcount程序
- 盘点 2013 年互联网发生的大事
- 大数据技术之SparkSQL(超级详细)
- infer的用法_infer是什么意思|infer的音标|infer的用法 - 英语词典
- osg火焰爆炸烟火粒子效果
- 【Spring】JavaBean、MVC软件设计模式与Java中Dao、Service、Controll三层体系
- 柯美服务器显示ff,柯尼卡美能达C故障代码解读.docx