HDU 3790 - 最短路径问题(优化Dijkstra)
来源:互联网 发布:ping地址命令 端口 编辑:程序博客网 时间:2024/05/16 12:25
看CSDN上好像没有优化Dijkstra的题解,来水一发
思路
多了一个权值,不过因为是以路径短为第一条件,只要在路径相同的时候更新费用最小值即可。
一开始无限WA,看了十来遍都找不出问题,后来才知道输入有重边!只能用更加熟悉了Dijkstra来聊以自慰,不过也涨姿势了,以后题目没说明的话就判断有没有重边。
代码
#include <cstdio>#include <algorithm>#include <cstring>#include <queue>using namespace std;#define LL long longconst int MAXN = 1000 + 5;const int INF = 0x3f3f3f3f;struct POINT{ int l, fee;}mp[MAXN][MAXN];int n, d[MAXN], f[MAXN];typedef pair<int, int> pii;priority_queue<pii, vector<pii>, greater<pii> > qu;void Dijkstra(int st){ int i, j; for (i = 0; i <= n; i++) d[i] = f[i] = INF; d[st] = f[st] = 0; qu.push(make_pair(d[st], st)); while (!qu.empty()) { pii u = qu.top(); qu.pop(); int x = u.second; if (d[x] != u.first) continue; for (i = 1; i <= n; i++) { if (d[i] > d[x] + mp[x][i].l) { d[i] = d[x] + mp[x][i].l; f[i] = f[x] + mp[x][i].fee; qu.push(make_pair(d[i], i)); } if (d[i] == d[x] + mp[x][i].l) f[i] = min(f[i], f[x] + mp[x][i].fee); } }}int main(){ //freopen("input.txt", "r", stdin); int m, a, b, l, fee, i, j, st, ed; while (scanf("%d%d", &n, &m), m + n) { for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) { mp[i][j].l = (i == j ? 0 : INF); mp[i][j].fee = (i == j ? 0 : INF); } for (i = 0; i < m; i++) { scanf("%d%d%d%d", &a, &b, &l, &fee); if (l < mp[a][b].l) { mp[a][b].l = mp[b][a].l = l; mp[a][b].fee = mp[b][a].fee = fee; } else if (l == mp[a][b].l) mp[a][b].fee = mp[b][a].fee = min(mp[a][b].fee, fee); } scanf("%d%d", &st, &ed); Dijkstra(st); printf("%d %d\n", d[ed], f[ed]); } return 0;}
0 0
- HDU 3790 - 最短路径问题(优化Dijkstra)
- HDU 3790 最短路径问题(Dijkstra)
- HDU--3790最短路径问题 【Dijkstra】
- hdu 3790 最短路径问题(Dijkstra)
- HDU 3790:最短路径问题【Dijkstra】
- HDU-3790 最短路径问题(Dijkstra)
- HDU 3790 最短路径问题(dijkstra)
- hdu 3790 最短路径问题(dijkstra)
- HDU -- 3790 最短路径问题 (Dijkstra+priority_queue)
- hdu 3790 最短路径问题(Dijkstra)
- HDU 3790 最短路径问题(双重Dijkstra算法)
- HDU-3790 最短路径问题 (Dijkstra)
- HDU - 3790 最短路径问题(Dijkstra)
- HDU 3790 最短路径问题(Dijkstra)
- HDU 3790 最短路径问题 (Dijkstra算法)
- hdu-3790-最短路径问题(Dijkstra)
- hdu 3790 最短路径问题 最短路Dijkstra
- HDU 3790 最短路径问题【最短路 dijkstra 双权值】
- hdu1201--18岁生日
- 使用jQuery使JSP页面中2个div的长度保持相同
- ACM 94. [NOIP2001] 统计单词个数(划分dp)
- 如何用 SQL Tuning Advisor (STA) 优化SQL语句
- 《分布式操作系统》部分知识点整理
- HDU 3790 - 最短路径问题(优化Dijkstra)
- java中到底什么是继承?
- Android 4.0 Launcher2源码分析——启动过程分析
- 八一八讨厌的字符串
- qtablewidget 导出为 excel
- 关于Dev—c++ 4.9.9.2 如何设置调试
- HDU 4946 - Area of Mushroom (计算几何 凸包)
- HDU 1281 棋盘游戏(二分图最大匹配:关键边)
- NSTimer知识点和倒计时的实现