题意:给出n个点,m条边,每条边的长度d和花费p,给出起点和终点的最短距离和花费,求最短距离,如果有多个最短距离,输出花费最少的

在用dijkstra求最短距离的时候,再用一个f[]数组保存下最少花费就可以了

这道题wa了好多次

因为 建立图的时候没有考虑到重边,

还有在建图的时候,如果遇到w[a][b]相等的情况,就应该将其对应的花费更新成更小的了

还有

在写dijkstra函数的时候,把终点带进去当做了点的个数 这样不对 因为假如给出的起点,终点分别是st,en

那么如果只计算到en点的话,如果从st到en+1,en+1到en有更优的话,这样就错了

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include <cmath>
  5. #include<stack>
  6. #include<vector>
  7. #include<map>
  8. #include<set>
  9. #include<queue>
  10. #include<algorithm>
  11. using namespace std;
  12.  
  13. typedef long long LL;
  14. const int INF = (<<)-;
  15. const int maxn=;
  16. int w1[maxn][maxn],w2[maxn][maxn],f[maxn],d[maxn],used[maxn];
  17. int w[maxn][maxn];
  18.  
  19. void dijkstra(int st,int en){
  20. memset(used,,sizeof(used));
  21. for(int i=;i<=en;i++) d[i]=INF;
  22. d[st]=;
  23.  
  24. for(int i=;i<=en;i++) f[i]=INF;
  25. f[st]=;
  26.  
  27. for(int k=;k<=en;k++){
  28. int p,m=INF;
  29. for(int i=;i<=en;i++) if(!used[i]&&d[i]<m) m=d[p=i];
  30. used[p]=;
  31. for(int i=;i<=en;i++) {
  32. if(d[i]>d[p]+w1[p][i]||(d[i]==d[p]+w1[p][i]&&f[i]>f[p]+w2[p][i])){
  33. d[i]=d[p]+w1[p][i];
  34. f[i]=f[p]+w2[p][i];
  35. }
  36. }
  37. }
  38. }
  39.  
  40. int main(){
  41. int a,b,c,e;
  42. int n,m;
  43. int st,en;
  44. while(scanf("%d %d",&n,&m)!=EOF&&n&&m){
  45. memset(w1,0x3f,sizeof(w1));
  46. memset(w2,0x3f,sizeof(w2));
  47.  
  48. for(int i=;i<=m;i++){
  49. scanf("%d %d %d %d",&a,&b,&c,&e);
  50. if(w1[a][b] > c)
  51. {
  52. w1[a][b] = w1[b][a] = c;
  53. w2[a][b] = w2[b][a] = e;
  54. }
  55. else if(w1[a][b] == c)
  56. w2[a][b] = w2[b][a] = min(w2[a][b],e);
  57. }
  58. scanf("%d %d",&st,&en);
  59. dijkstra(st,n);
  60. printf("%d %d\n",d[en],f[en]);
  61. }
  62. return ;
  63. }

HDU 3790 最短路径问题【Dijkstra】的更多相关文章

  1. ACM: HDU 3790 最短路径问题-Dijkstra算法

    HDU 3790 最短路径问题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Des ...

  2. HDU - 3790 最短路径问题 (dijkstra算法)

    HDU - 3790 最短路径问题 Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费 ...

  3. POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3790 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你 ...

  4. hdu 3790 最短路径问题(双重权值,dijkstra算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 题目大意:题意明了,输出最短路径及其花费. 需要注意的几点:(1)当最短路径相同时,输出最小花费 ...

  5. #HDU 3790 最短路径问题 【Dijkstra入门题】

    题目: 最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. hdu 3790 最短路径dijkstra(多重权值)

    最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  7. HDU 3790 最短路径问题(SPFA || Dijkstra )

    题目链接 题意 : 中文题不详述. 思路 :无论是SPFA还是Dijkstra都在更新最短路的那个地方直接将花费更新了就行,还有别忘了判重边,话说因为忘了判重边WA了一次. #include < ...

  8. hdu 3790 最短路径问题(两个限制条件的最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=3790 有两个条件:距离和花费.首先要求距离最短,距离相等的条件下花费最小. dijkstra,仅仅是在推断条件时 ...

  9. HDU 3790 最短路径问题 (最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 简单的最短路问题,这题听说有重边.我用spfa和dijkstra写了一遍,没判重边,速度都差不多 ...

随机推荐

  1. TKStudio 4.6IDE Warning: L6310W: Unable to find ARM libraries.

    我也遇到了同样的问题.搞了很久,按下面的操解决了 内容转至:http://bbs.zlgmcu.com/dv_rss.asp?s=xh&boardid=43&id=23032& ...

  2. HDU4782 Beautiful Soup

    成都赛里的一道坑爹码力题,突然间脑抽想做一下弥补一下当时的遗憾.当时没做出这道题一是因为当时只剩大概45分钟,对于这样的具有各种条件的题无从下手,二则是因为当时估算着已经有银牌了,所以就不挣扎了.但是 ...

  3. HDU 2672 god is a girl (字符串处理,找规律,简单)

    题目 //1,1,2,3,5,8,13,21,34,55…… //斐波纳契数列 #include<math.h> #include<stdio.h> #include<s ...

  4. Twitter注册

    Twitter注册 - (一般分享不了是回调地址不对) 1.打开twitter的官网https://dev.twitter.com,如果还没有注册账号的,需要注册账号,已经注册账号的,请先登录: 2. ...

  5. POJ 1995

    #include <iostream> using namespace std; long long power(long long a, long long b, long long m ...

  6. VS2010 Notes

    1.fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 VS2010在经历一些更新后,建立Win32 Console Project时会出“error LNK112 ...

  7. Mybatis批量插入oracle,mysql

    oracle  <insert id="addUserData" parameterType="java.util.List"> INSERT IN ...

  8. Map中放置类指针并实现调用

    工作中使用到多进程通信,利用到了map以及multimap来进行实现. 需要做一个简单测试例子,直接上代码. /* * main.cpp * Created on: Oct 28, 2013 * Au ...

  9. HDU 4169 树形DP

    Wealthy Family Problem Description While studying the history of royal families, you want to know ho ...

  10. SPRING IN ACTION 第4版笔记-第十章Hitting the database with spring and jdbc-004-使用NamedParameterJdbcTemplate

    为了使查询数据库时,可以使用命名参数,则要用NamedParameterJdbcTemplate 1.Java文件配置 @Bean public NamedParameterJdbcTemplate ...