3790:最短路径问题(HDU)
(1<n<=1000, 0<m<100000, s != t)
1 #include<iostream>
2 #include<map>
3 #include<cstdio>
4 using namespace std;
5 #define inf 1000000000
6 int s, t;
7 int n, m,k;
8 struct di
9 {
10 int s, money;
11 }dis[1010];
12 struct e
13 {
14 int from, to, distance, cost;
15 }es[100010];
16 void ds()
17 {
18 dis[s].s = 0;
19 while (true)
20 {
21 bool update = false;
22 for (int i = 0; i < k; i++)
23 {
24 if (dis[es[i].from].s != inf && (dis[es[i].to].s > dis[es[i].from].s + es[i].distance ))
25 {
26 dis[es[i].to].s = dis[es[i].from].s + es[i].distance;
27 dis[es[i].to].money = dis[es[i].from].money + es[i].cost;
28 update = true;
29 }
30 else if(dis[es[i].to].s == dis[es[i].from].s + es[i].distance&&dis[es[i].to].money > dis[es[i].from].money + es[i].cost)
31 {
32 dis[es[i].to].s = dis[es[i].from].s + es[i].distance;
33 dis[es[i].to].money = dis[es[i].from].money + es[i].cost;
34 }
35 }
36 if (!update) break;
37 }
38 printf("%d %d\n", dis[t].s, dis[t].money);
39 }
40 int main()
41 {
42 while (cin >> n >> m, n != 0 && m != 0)
43 {
44 k = 0;
45 for (int i = 0; i < m; i++)
46 {
47 int a, b, c, d;
48 scanf("%d %d %d %d", &a,&b,&c,&d);
49 es[k].from = a, es[k].to = b, es[k].distance = c, es[k++].cost = d;
50 es[k].from = b, es[k].to = a, es[k].distance = c, es[k++].cost = d;
51 }
52 for (int i = 0; i <= n; i++)
53 {
54 dis[i].s = inf;
55 dis[i].money = 0;
56 }
57 scanf("%d %d", &s, &t);
58 ds();
59 }
60 return 0;
61 }
这是网上大佬的方法,为方便复习,拿来用了;
思路是djkstra的算法,当时我也想用了的,就是不太清楚cost给怎么定义,所以就用了bellman-ford,下次用队列优化的bellman-ford试试
1 #include <iostream>
2 #include <cstring>
3 #include <cstdio>
4 #define maxn 1007
5 #define INF 65535
6 using namespace std;
7
8 int start,e;
9 int n,m;
10 int map[maxn][maxn];
11 int cost[maxn][maxn];
12
13 void Dijkstra()
14 {
15 int v,Min,vis[maxn];
16 int d[maxn],c[maxn];
17 for(int i = 1;i <= n;i++) {
18 d[i] = map[start][i];
19 c[i] = cost[start][i];
20 }
21 memset(vis,0,sizeof(vis));
22 vis[start] = 1;
23 for(int i = 1;i <= n;i++)
24 {
25 if(vis[e]) break;
26 Min = INF;
27 for(int j = 1;j <= n;j++)
28 if(!vis[j] && d[j]<Min)
29 Min = d[v=j];
30 vis[v] = 1;
31 for(int j = 1;j <= n;j++)
32 if(!vis[j] && map[v][j]<INF) {
33 if(d[j] > d[v]+map[v][j]) {
34 d[j] = d[v]+map[v][j];
35 c[j] = c[v]+cost[v][j];
36 }
37 else if(d[j] == d[v]+map[v][j])
38 if(c[j] > c[v]+cost[v][j])
39 c[j] = c[v]+cost[v][j];
40 }
41 }
42 printf("%d %d\n",d[e],c[e]);
43 }
44
45 int main()
46 {
47 while(scanf("%d%d",&n,&m) && n+m)
48 {
49 for(int i = 1;i <= n;i++)
50 for(int j = 1;j <= n;j++) {
51 map[i][j] = i==j?0:INF;
52 cost[i][j] = i==j?0:INF;
53 }
54 int a,b,c,d;
55 for(int i = 1;i <= m;i++)
56 {
57 scanf("%d%d%d%d",&a,&b,&c,&d);
58 if(map[a][b]>c)
59 {
60 map[a][b]=map[b][a]=c;
61 cost[a][b]=cost[b][a]=d;
62 }
63 else if(map[a][b]==c)
64 {
65 if(cost[a][b]>d)
66 cost[a][b]=cost[b][a]=d;
67 }
68 }
69 scanf("%d%d",&start,&e);
70 Dijkstra();
71 }
72 return 0;
73 }
3790:最短路径问题(HDU)的更多相关文章
- ACM: HDU 3790 最短路径问题-Dijkstra算法
HDU 3790 最短路径问题 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Des ...
- HDU - 3790 最短路径问题 (dijkstra算法)
HDU - 3790 最短路径问题 Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费 ...
- HDU ACM 3790 最短路径问题
最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU 3790最短路径问题 [最短路最小花费]
题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=3790] 最短路径问题 Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 3790 最短路径问题(双重权值,dijkstra算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 题目大意:题意明了,输出最短路径及其花费. 需要注意的几点:(1)当最短路径相同时,输出最小花费 ...
- hdu 3790 最短路径问题(两个限制条件的最短路)
http://acm.hdu.edu.cn/showproblem.php?pid=3790 有两个条件:距离和花费.首先要求距离最短,距离相等的条件下花费最小. dijkstra,仅仅是在推断条件时 ...
- HDU 3790 最短路径问题 (最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 简单的最短路问题,这题听说有重边.我用spfa和dijkstra写了一遍,没判重边,速度都差不多 ...
- 最短路径问题 HDU 3790
最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- #HDU 3790 最短路径问题 【Dijkstra入门题】
题目: 最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 题解报告:hdu 3790 最短路径问题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起 ...
随机推荐
- python购物车作业
# -*- coding:utf8 -*- # Author:Wang Yao goods = [{"name": "电脑", "price" ...
- 通过Cookie统计上次网页访问时间
servlet类: import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date; import ...
- VS 中NuGet 尝试还原程序包时出错"*"已拥有为"**"定义的依赖项
之前从Git检出项目以后,项目编译不能通过,发现是缺少依赖的外部插件,于是通过NuGet去获取项目依赖的插件,如何通过NuGet恢复使用的插件请使用NuGet还原项目插件. 但是就是在使用NuGet还 ...
- 更新glibc版本,有问题,有三篇博客的命令看不懂
https://blog.csdn.net/glongljl/article/details/80156243 https://blog.csdn.net/officercat/article/det ...
- markdown自动生成侧边栏TOC /目录
http://blog.csdn.net/haleypku/article/details/51226704 此文可以只了解一下概念: http://i5ting.github.io/i5ting_z ...
- Django实战(一)-----用户登录与注册系统1(环境搭建)
一.背景 学了一段时间的语法,总感觉入不了门,所以找点小项目练练手,项目来自网络. 二.创建虚拟环境,并安装Django 使用Python中的virtualenv搭建一个mysite_env全新的环境 ...
- Elasticsearch 5.4.3实战--Java API调用:索引mapping创建
因为项目开发使用的是Java语言, 项目的开发架构是Spring MVC+ maven的jar包管理, 所以今天重点说说ES 5.4.3 的Java API的源码实战 1. pom.xml文件增加依 ...
- 2018 Multi-University Training Contest 3 杭电多校第三场
躺了几天 终于记得来填坑了 1001 Ascending Rating (hdoj 6319) 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6319 ...
- javascript面向对象学习
1.this指向问题,指向的是当前的方法属于谁,当前的方法属于谁就指向谁!! 例子: oDiv.onclick = function () { this指向的是oDiv,因为这个方法属于oDiv } ...
- window10 matlabR2015b 安装minGw
第一步:下载TDM-GCC(注意看清是32位还是64位),TDM-GCC的安装路径不要包括空格: http://tdm-gcc.tdragon.net/download 第二步:点击“我的电脑”右键“ ...