HDU 3790 简单最短路径问题(dijkstra+双重权值)
来源:互联网 发布:空气净化器有用吗 知乎 编辑:程序博客网 时间:2024/05/19 19:34
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。
(1<n<=1000, 0<m<100000, s != t)
3 21 2 5 62 3 4 51 30 0
9 11
思路:这也是这道题的重点,去掉重复的边,如果边相同,选择金钱比较少的边
上代码
#include<iostream>#include<cmath>#include<cstring>#include<algorithm>#include<stack>#include<queue>#include<vector>#include<cstdio>#include<string>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define Max 1010int n, pp[Max][Max], M[Max][Max], d[Max], cost[Max];bool visit[Max];vector<pair<int, int> >G[Max];void init(int nn){for (int i = 1; i <= nn; i++){for (int j = 1; j <= nn; j++){M[i][j] = inf;pp[i][j] = inf;}d[i] = inf;cost[i] = inf;}memset(visit, false, sizeof(visit));}void dijkstra(int s, int t){int minv;d[s] = 0, cost[s] = 0;while (1){minv = inf;int u = -1;for (int i = 1; i <= n; i++){if (minv>d[i] && visit[i] == false){u = i;minv = d[i];}}if (u == -1)break;visit[u] = true;for (int i = 1; i <= n; i++){if (visit[i])continue;if (d[i] == d[u] + M[u][i] && M[u][i] != inf&&cost[i]>cost[u] + pp[u][i])cost[i] = cost[u] + pp[u][i];if (d[i]>d[u] + M[u][i]){d[i] = d[u] + M[u][i];cost[i] = cost[u] + pp[u][i];}}}cout << d[t] << " " << cost[t] << endl;}int main(){//freopen("Text1.txt","r",stdin);int m, u, v, d, p, s, t;while (scanf("%d%d", &n, &m) != EOF){if (n == 0 && m == 0)break;init(n);for (int i = 0; i<m; i++){scanf("%d%d%d%d", &u, &v, &d, &p);if (M[u][v]>d){M[u][v] = M[v][u] = d;pp[u][v] = pp[v][u] = p;}if (M[u][v] == d&&pp[u][v] > p)//边相同选择最小金钱的边,否则去掉pp[u][v] = pp[v][u] = p;}scanf("%d%d", &s, &t);dijkstra(s, t);}return 0;}
阅读全文
0 0
- HDU 3790 简单最短路径问题(dijkstra+双重权值)
- HDU 3790 最短路径问题(双重Dijkstra算法)
- HDU 3790 最短路径问题 (双重权值)
- hdu 3790 最短路径问题(双重权值,dijkstra算法)
- HDU 3790 最短路径问题 (dijkstra+双重条件)
- HDU 3790 最短路径问题 【双重权值问题】
- HDU 3790 最短路径问题 (双重权值) dp
- HDU 3790 最短路径问题 双重权值
- POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)
- HDU 3790 最短路径问题(Dijkstra)
- HDU--3790最短路径问题 【Dijkstra】
- hdu 3790 最短路径问题(Dijkstra)
- HDU 3790:最短路径问题【Dijkstra】
- HDU-3790 最短路径问题(Dijkstra)
- HDU 3790 最短路径问题(dijkstra)
- HDU3790 最短路径问题(双重权值+spfa)
- hdu 3790 最短路径问题(dijkstra)
- HDU 3790 - 最短路径问题(优化Dijkstra)
- 安装pip以及pygame
- 浅谈解决浏览器不执行javascript的问题(sf.gg也发表了一份)
- Linux学习笔记(2)_用户,用户组,文件权限
- SXSSFWorkbook导出大数据量Excel文件
- 数理逻辑2 -- 量化理论5
- HDU 3790 简单最短路径问题(dijkstra+双重权值)
- Chapter03 国际化(二) 数字格式
- Android内存解析<二>
- android 编译错误 Error:(1, 0) Plugin with id 'com.android.application' not found. 解决
- 如何入门 Python 爬虫?
- VLC 集成
- 机器学习(十六)
- sublime快捷键使用
- 五分钟学GIS | GPU在GIS技术上的应用