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

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

这道题wa了好多次

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

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

还有

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

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

 #include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
using namespace std; typedef long long LL;
const int INF = (<<)-;
const int maxn=;
int w1[maxn][maxn],w2[maxn][maxn],f[maxn],d[maxn],used[maxn];
int w[maxn][maxn]; void dijkstra(int st,int en){
memset(used,,sizeof(used));
for(int i=;i<=en;i++) d[i]=INF;
d[st]=; for(int i=;i<=en;i++) f[i]=INF;
f[st]=; for(int k=;k<=en;k++){
int p,m=INF;
for(int i=;i<=en;i++) if(!used[i]&&d[i]<m) m=d[p=i];
used[p]=;
for(int i=;i<=en;i++) {
if(d[i]>d[p]+w1[p][i]||(d[i]==d[p]+w1[p][i]&&f[i]>f[p]+w2[p][i])){
d[i]=d[p]+w1[p][i];
f[i]=f[p]+w2[p][i];
}
}
}
} int main(){
int a,b,c,e;
int n,m;
int st,en;
while(scanf("%d %d",&n,&m)!=EOF&&n&&m){
memset(w1,0x3f,sizeof(w1));
memset(w2,0x3f,sizeof(w2)); for(int i=;i<=m;i++){
scanf("%d %d %d %d",&a,&b,&c,&e);
if(w1[a][b] > c)
{
w1[a][b] = w1[b][a] = c;
w2[a][b] = w2[b][a] = e;
}
else if(w1[a][b] == c)
w2[a][b] = w2[b][a] = min(w2[a][b],e);
}
scanf("%d %d",&st,&en);
dijkstra(st,n);
printf("%d %d\n",d[en],f[en]);
}
return ;
}

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. BZOJ1821: [JSOI2010]Group 部落划分

    这题乍看很吓人,其实就是一个贪心. 每次取最近的两个点所在的块合并,直到只剩下k块,输出答案. /*************************************************** ...

  2. PHP JAVA Bridge桥的最新使用

    PHP JAVA Bridge桥的最新使用 在PHP和Java之间搭建一座桥梁,利用这座桥梁在这两个实体之间建立起一个沟通渠道,在这座桥梁的帮助下,你可以在Java中开发类,然后在PHP中调用它们的方 ...

  3. C#&java重学笔记(泛型)

    C#部分: 1.泛型的出现主要用于解决类.接口.委托.方法的通用性,通过定义泛型类.接口.委托.方法,可以让不同类型的数据使用相同运算规则处理数据,方便了开发. 2.利用System.Nullable ...

  4. [你必须知道的.NET]第三十二回,,深入.NET 4.0之,Tuple一二

    发布日期:2009.06.01 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. Tuple,是函数式编程的概念之一,早见于Elang.F#等动态 ...

  5. hdu 4739 Zhuge Liang's Mines

    一个简单的搜索题,唉…… 当时脑子抽了,没做出来啊…… 代码如下: #include<iostream> #include<stdio.h> #include<algor ...

  6. eclipse创建python项目

    http://jingyan.baidu.com/article/19192ad8173300e53f570757.html

  7. C#加密算法汇总

    方法一: //须添加对System.Web的引用 using System.Web.Security; ... /// <summary> /// SHA1加密字符串 /// </s ...

  8. 解决xshell连接linux总是异常断开的问题?

    找到etc下面的profile文件,可以看到有下面一行: TMOUT=;export TMOUT 注释掉即可解决. #TMOUT=;export TMOUT

  9. fuel openstack 在 VirtualBox 上的部署

    搞了两天,终于搞好了.说说过程: 一开始用的6.1版本的Fuel.iso,按照国内外的教程装了几遍,但是网路验证始终不能通过.自己又不是很懂网络.后来在网上看到说6.1版的需要fuel-master连 ...

  10. 李洪强iOS开发之OC点语法和变量作用域

    OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: 1 #import <Foundation/Foundation.h> 2 3 @interface Per ...