地址 https://www.acwing.com/problem/content/description/855/

给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。

请你求出从1号点到n号点的最多经过k条边的最短距离,如果无法从1号点走到n号点,输出impossible。

注意:图中可能 存在负权回路 。

输入格式

第一行包含三个整数n,m,k。

接下来m行,每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。

输出格式

输出一个整数,表示从1号点到n号点的最多经过k条边的最短距离。

如果不存在满足条件的路径,则输出“impossible”。

数据范围

1≤n,k≤5001≤n,k≤500,
1≤m≤100001≤m≤10000,
任意边长的绝对值不超过10000。

输入样例:

输出样例:

解法

#include <iostream>
#include <vector>
#include <memory.h> using namespace std; const int N = ; vector<vector<pair<int, int>>> v;
int dist[N];
int back[N];
int n, m, k; /*
3 3 1
1 2 1
2 3 1
1 3 3
*/
void solveInner(int back[])
{
for (int i = ; i < v.size(); i++) {
for (int j = ; j < v[i].size(); j++) {
int a = i; int b = v[i][j].first; int w = v[i][j].second;
if (dist[b] > back[a] + w) {
dist[b] = back[a] + w;
}
}
}
} int solve()
{
memset(dist, 0x3f, sizeof(dist));
dist[] = ; //进行n轮
for (int i = ; i < k; i++) {
memcpy(back, dist, sizeof dist);
solveInner(back);
} if (dist[n] > 0x3f3f3f3f / ) return -;
return dist[n]; } int main()
{
scanf("%d%d%d",&n,&m,&k);
//cin >> n >> m >> k; v.resize(n + ); for (int i = ; i < m; i++) {
int a, b, c;
//cin >> a >> b >> c;
scanf("%d%d%d",&a,&b,&c);
v[a].push_back({ b,c });
} int ret = solve(); if (ret == -) printf("impossible");
else printf("%d\n",ret); return ;
}

acwing 853. 有边数限制的最短路 模板的更多相关文章

  1. AcWing 853. 有边数限制的最短路 bellman-ford 结构体

    //存在负权值 处理负环 //如果能求出来 一般是不存在负权回路 //如果有负回路 那最小距离可能是负无穷 #include <cstring> #include <iostream ...

  2. 853. 有边数限制的最短路(Bellman-ford算法模板)

    给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数. 请你求出从1号点到n号点的最多经过k条边的最短距离,如果无法从1号点走到n号点,输出impossible. 注意:图中可能 存 ...

  3. Bellman-Ford算法 求有边数限制的最短路

    这个算法也是紧承我们之前讲过的关于图论的内容,我们在前面分析图的时候说过了对于不同的图论问题,我们会有不同的求解方法,那么这里我们讲到Bellman-Ford算法是用于解决有边数限制的求解最短路问题. ...

  4. AcWing 4378. 选取数对

    y总分析:这种题(我也不知道说的是哪种题hh)一般解法为贪心或dp,而本题用的是dp. 其实个人感觉题目不是很严谨,从y总讲解和题解分析得知各个数对区间是不能重叠的,但是题目使用的是≤,感觉数对的区间 ...

  5. POJ 2449Remmarguts' Date K短路模板 SPFA+A*

    K短路模板,A*+SPFA求K短路.A*中h的求法为在反图中做SPFA,求出到T点的最短路,极为估价函数h(这里不再是估价,而是准确值),然后跑A*,从S点开始(此时为最短路),然后把与S点能达到的点 ...

  6. poj1511/zoj2008 Invitation Cards(最短路模板题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Invitation Cards Time Limit: 5 Seconds    ...

  7. k短路模板 POJ2449

    采用A*算法的k短路模板 #include <iostream> #include <cstdio> #include <cstring> #include < ...

  8. HDU 5521.Meeting 最短路模板题

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  9. ACM-ICPC 2018 沈阳赛区网络预赛 D. Made In Heaven(第k短路模板)

    求第k短路模板 先逆向求每个点到终点的距离,再用dij算法,不会超时(虽然还没搞明白为啥... #include<iostream> #include<cstdio> #inc ...

随机推荐

  1. 垂直margin为什么会重叠

    之前看到的post中有这样的一个问题:垂直margin为什么会重叠?我可以说出solve,但是说不出why. 在stackoverflow上找到了一个很好的解释:margin的定义不是让元素移动xxp ...

  2. python基础入门 列表

    列表 1.关键字---list 2.定义:用来存储数据可存储多种数据类型 支持索引,切片 是有序的 可变的 3.定义一个列表 l1 = ['列表','字符串','lnh',123,'kk0','ttt ...

  3. php使用phpqrcode生成二维码

    前期准备: 1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是 ...

  4. tomcat session共享

    1.版本 redis3.2   nginx   tomcat8.5 2.下载jar包  tomcat-cluster-redis-session-manager 解压后大家可以看看 readMe.tx ...

  5. Docker 以及 docker-compose 的部署

    Docker部署 方式一 #下载软件源 wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/li ...

  6. docker容器和虚拟机的比较

    containers:容器是在应用层的抽象化,多个容器能够运行在同一台机器上,和其他容器共享操作系统的核,每个容器运行都独立的运行在用户的空间内.容器需要的空间比虚拟机要小(容器镜像的大小一般为MBs ...

  7. numpy输出有省略号的问题

    发现很多文章都说加一句 np.set_printoptions(threshold="nan") 或者 np.set_printoptions(threshold=np.nan) ...

  8. IT兄弟连 HTML5教程 Media Queries的使用方法

    在上例中,我们使用Media Queries模块来根据3种不同尺寸的窗口使用3种不同的样式.通过不同的媒体类型和条件定义样式表规则,媒体查询让CSS可以更精确地作用于不同的媒体类型和同一媒体的不同条件 ...

  9. idea自用快捷键(非常实用)

    最近看了下idea的快捷键,不禁感慨idea真是太强大了,这里记录一下我常用的快捷键 Ctrl+F:在当前文件中查找 Ctrl+R:替换字符串 Alt + shift + 鼠标点击   多处同时编辑 ...

  10. 为用户分配有效期程序-更新数据库的TRY使用

    REPORT ZPMRP030. TABLES:USR02. DATA: L_ERROR TYPE REF TO CX_SY_OPEN_SQL_DB, L_ERROR_TEXT TYPE STRING ...