#include <iostream>
#include <stdio.h>
#include <string.h>
#include <cstring>
using namespace std; const int INF = ;
const int MAXSIZE = ; int map[MAXSIZE][MAXSIZE];
int price[MAXSIZE][MAXSIZE];
int n; void Dijkstra(int s,int e){
bool done[MAXSIZE];
int dis[MAXSIZE],co[MAXSIZE]; memset(done,,sizeof(done)); for(int i = ;i <= n;i++)
dis[i] = INF;
dis[s] = co[s] = ; for(int i = ;i <= n;i++){//最多执行n+1次操作
int pos,minn = INF;
for(int j = ;j <= n;j++){//先找到d[]最小的点
if(!done[j] && dis[j] < minn){
minn = dis[j];
pos = j;
}
}
done[pos] = ;//将该点加入集合
for(int j = ;j <= n;j++){//再更新所有的d[]
//if(!done[j] && d[minx] + map[minx][j] < d[j])
//d[j] = d[minx] + map[minx][j]; if (!done[j] && map[pos][j] != INF){
//若存在更小的路径,取更小的路径
if (dis[j] > dis[pos] + map[pos][j]){
dis[j] = map[pos][j] + dis[pos];
co[j] = price[pos][j] + co[pos];
}
//当最短路径相等时候,取价格小的
else if (dis[j] == dis[pos] + map[pos][j] && co[j] > co[pos] + price[pos][j])
co[j] = co[pos] + price[pos][j];
}
}
}
printf("%d %d\n",dis[e],co[e]);
} int main(){
int m,s;
int i,j;
int p,q,t,pri;
int ww,ans; while(scanf("%d%d",&n,&m) , n || m){
ans = ;
for(i = ;i < MAXSIZE;i++){
for(j = ;j < MAXSIZE;j++){
if(i == j)
map[i][j] = ;
else
map[i][j] = INF;
}
}
while(m--){
scanf("%d%d%d%d",&p,&q,&t,&pri);
if(t < map[p][q]){//可能两站间存在多条线路取短的那条路
map[p][q] = t;
map[q][p] = t;
price[p][q] = pri;
price[q][p] = pri;
}
}
scanf("%d%d",&ww,&s);
map[][ww] = ;
Dijkstra(,s);//巧妙之处,加入超级源点0
}
return ;
}

HDOJ 3790 双权值Dijkstra的更多相关文章

  1. hdoj--3790--最短路径问题(双权值迪杰斯特拉)

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

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

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

  3. 51nod1459(带权值的dijkstra)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1459 题意:中文题诶- 思路:带权值的最短路,这道题数据也没 ...

  4. Dijkstra算法为什么权值不能为负

    Dijkstra算法当中将节点分为已求得最短路径的集合(记为S)和未确定最短路径的个集合(记为U),归入S集合的节点的最短路径及其长度不再变更,如果边上的权值允许为负值,那么有可能出现当与S内某点(记 ...

  5. 紧急救援 L2-001 dijkstra 打印路径 最短路条数 权值

    较为复杂的dijkstra 包含路径打印  最小路的条数  最小路径的情况下取最大权值 v0要是标记就会出错...? 有权值的题目  不能设置mp[i][i]为0  否则会无限加权 这题很有参考价值 ...

  6. 非负权值有向图上的单源最短路径算法之Dijkstra算法

    问题的提法是:给定一个没有负权值的有向图和其中一个点src作为源点(source),求从点src到其余个点的最短路径及路径长度.求解该问题的算法一般为Dijkstra算法. 假设图顶点个数为n,则针对 ...

  7. Dijkstra 算法——计算有权最短路径(边有权值)

    [0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在理解 Dijkstra 的思想并用源代码加以实现: 0.2)最短路径算法的基础知识,参见 http://blog. ...

  8. hdu Caocao's Bridges(无向图边双连通分量,找出权值最小的桥)

    /* 题意:给出一个无向图,去掉一条权值最小边,使这个无向图不再连同! tm太坑了... 1,如果这个无向图开始就是一个非连通图,直接输出0 2,重边(两个节点存在多条边, 权值不一样) 3,如果找到 ...

  9. POJ 1797 Heavy Transportation(Dijkstra变形——最长路径最小权值)

    题目链接: http://poj.org/problem?id=1797 Background Hugo Heavy is happy. After the breakdown of the Carg ...

随机推荐

  1. android adb经常使用的命令

    1.adb--- 订购屏幕截取  :adb shell screencap -p | sed 's/\r$//' > outputs.png 2.jni ---命令    :$NDK/ndk-b ...

  2. 微信二维码扫描下载APK

    前几天给客户制作的app需要上线,生成二维码扫描进行下载,把生成好的apk挂在服务器端,将地址复制下来,通过草料二维码(http://cli.im/)生成一个二维码 也许你会看到有个app的选项,为什 ...

  3. mysqlcluster笔记

    1.config的datamemory和indexmemory规定的内存占有量会在ndb启动时直接占用掉,所以在计算内存时,这两个加起来要小于ndb的内存,这两个还只是数据和索引的内存,查询或者插入时 ...

  4. iOS开发常识

    一.NSString 创建字符串.  NSString *astring = @"This is a String!"; 创建空字符串,给予赋值.  NSString *astri ...

  5. 【转载】Google Analytics 使用图文全攻略

    转载自:Google Analytics 使用图文全攻略 最近一段时间,因为工作的需要,小励使用GA(GA是Google Analytics的简称)比较频繁,所以花时间研究了一下,从不太了解到会使用( ...

  6. 2015-12-27 socket的用法

    sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0) sk.bind(address) s.bind(address) 将套接字绑定到地址.a ...

  7. struts2 DMI问题

    最新开始学习struts2,在官网上下载的最新的struts2(2.3.15.2), jar包,在使用动态方法调用的时候老是报错,错误代码如下HTTP Status 404 - There is no ...

  8. 告别IE给我们的web开发带来的困扰(使用chrome frame v8引擎)

    茶爸爸个人微信:benyzhous,公众号:cha-baba欢迎骚扰 由于客户所有机器必须使用IE6浏览器,导致我们在开发项目过程中遇到非常多的样式与性能问题,在偶然的一次使用360软件管家搜索chr ...

  9. 啊华北哦好咕~~(╯﹏╰)b

    http://v.qq.com/boke/page/c/h/0/c01173tzeh0.html http://v.qq.com/boke/page/r/7/x/r0117l07r7x.html ht ...

  10. 基于visual Studio2013解决C语言竞赛题之0303最大数

     题目 解决代码及点评 这道题考察对条件分支和赋值的灵活应用 正常思维 如果 a>b and a>c 那么a最大 如果b>c and b>a 那么b最大 如果c>a ...