#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. java Script 中的keyCode 和charCode

    其实很长一段时间,我都没有完全弄明白keyCode 和charCode ,自己也认真看过,但是就是理解不透彻,为了防止以后再出现混乱,写篇博客记录一下吧! 首先  在不同的浏览器中,他们有不同的说法哦 ...

  2. SharePoint迁移数据到生产环境

    SharePoint迁移数据到生产环境步骤如下: 1. 安装部署好生产环境 2. 配置管理中心 3. 安装SPD工具 4. 备份数据库(放在数据库服务器) 5. 备份wsp包(部署在管理中心服务器) ...

  3. 建立dblink,clob

    建立dblink的方法, 如果有个测试库A,要访问生产库里的数据,那么可以直接在测试库A里建立一个dblink,然后数据库A就可以直接访问测试库B的数据了. -- 删除已有的dblink drop d ...

  4. centos6.5配置163的yum源

    CentOS系统自带的更新源的速度实在是慢,为了让CentOS6使用速度更快的YUM更新源,可以选择163(网易)的更新源. 1.下载repo文件 wget http://mirrors.163.co ...

  5. CentOS6.5安装MySQL5.7详细教程

    注:文中所写的安装过程均在CentOS6.5 x86下通过测试 主要参考博文: https://segmentfault.com/a/1190000003049498 http://www.th7.c ...

  6. python学习之day9

    队列queue 队列是线程安全的,它保证多线程间的数据交互的一致性. 先进先出队列Queue import queue q = queue.Queue(maxsize=3) #maxsize为队列最大 ...

  7. Hadoop2.6 Ha 安装

    Hadoop 2.6安装文档 版本说明:hadoop 2.6  linux-64位 Zookeeper3.4.6 jdk 1.7.0_75 1.       Ssh无密码 ssh-keygen vim ...

  8. 高质量程序设计指南C/C++语言——C++/C常量

  9. USB CCID协议和PC/SC标准

    CCID是USB Chip/Smart Card Interface Devices,也就是USB芯片智能卡接口设备,是USB规范下的一种设备类型.就像HID设备一样,需要参考USB规范来写固件程序来 ...

  10. 跨平台生成GUID/UUID

    #ifndef XGUID_H#define XGUID_H #include <string>#include <stdio.h>#ifdef WIN32#include & ...