HDOJ 3790 双权值Dijkstra
#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的更多相关文章
- hdoj--3790--最短路径问题(双权值迪杰斯特拉)
最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3790 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你 ...
- 51nod1459(带权值的dijkstra)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1459 题意:中文题诶- 思路:带权值的最短路,这道题数据也没 ...
- Dijkstra算法为什么权值不能为负
Dijkstra算法当中将节点分为已求得最短路径的集合(记为S)和未确定最短路径的个集合(记为U),归入S集合的节点的最短路径及其长度不再变更,如果边上的权值允许为负值,那么有可能出现当与S内某点(记 ...
- 紧急救援 L2-001 dijkstra 打印路径 最短路条数 权值
较为复杂的dijkstra 包含路径打印 最小路的条数 最小路径的情况下取最大权值 v0要是标记就会出错...? 有权值的题目 不能设置mp[i][i]为0 否则会无限加权 这题很有参考价值 ...
- 非负权值有向图上的单源最短路径算法之Dijkstra算法
问题的提法是:给定一个没有负权值的有向图和其中一个点src作为源点(source),求从点src到其余个点的最短路径及路径长度.求解该问题的算法一般为Dijkstra算法. 假设图顶点个数为n,则针对 ...
- Dijkstra 算法——计算有权最短路径(边有权值)
[0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在理解 Dijkstra 的思想并用源代码加以实现: 0.2)最短路径算法的基础知识,参见 http://blog. ...
- hdu Caocao's Bridges(无向图边双连通分量,找出权值最小的桥)
/* 题意:给出一个无向图,去掉一条权值最小边,使这个无向图不再连同! tm太坑了... 1,如果这个无向图开始就是一个非连通图,直接输出0 2,重边(两个节点存在多条边, 权值不一样) 3,如果找到 ...
- POJ 1797 Heavy Transportation(Dijkstra变形——最长路径最小权值)
题目链接: http://poj.org/problem?id=1797 Background Hugo Heavy is happy. After the breakdown of the Carg ...
随机推荐
- YUV / RGB 格式及快速转换算法
1 前言 自然界的颜色千变万化,为了给颜色一个量化的衡量标准,就需要建立色彩空间模型来描述各种各样的颜色,由于人对色彩的感知是一个复杂的生理和心理联合作用 的过程,所以在不同的应用领域中为了更好更准确 ...
- c#Winform程序的toolStripButton自己定义背景应用演示样例源代码
C# Winform程序的toolStrip中toolStripButton的背景是蓝色的,怎样改变背景及边框的颜色和样式呢? 实现此功能须要重写toolStripButton的Paint方法 这里仅 ...
- 一个简单链表的C++实现
/* LList.cpp * Author: Qiang Xiao * Time: 2015-07-12 */ #include<iostream> using namespace std ...
- jacksonall的使用,解析json
转自:http://www.cnblogs.com/lee0oo0/archive/2012/08/23/2652751.html , Jackson可以轻松的将Java对象转换成json对象和xml ...
- js中去除换行(\r\n)
解决方法:replace(/\r\n/g,"").replace("\n","") 测试: <script> var str = ...
- hdu 2841 Visible Trees
/** 大意: 求[1,m], [1,n] 之间有多少个数互素...做了 1695 ,,这题就so easy 了 **/ #include <iostream> #include < ...
- UnixShell编程(第三版) 二章
这本书写的真的很好,让人欲罢不能的读下去. 1,可以简单的将命令看做类似函数的东西,而后面跟的是所传的参数. echo Hello Word > Hi 将字符串hello Wrod 写入文件 ...
- {% load staticfiles %}
原先写法 {# <link rel="stylesheet" href="/static/css/reset.css"/>#} 不使用路径写法,方便 ...
- django最佳实践
导入的时候使用绝对导入或者清晰的相对导入 相对导入用法: from __future__ import absolute_import from .models import what_u_need ...
- Windows Phone 8初学者开发—第3部分:编写第一个Windows Phone 8应用程序
原文 Windows Phone 8初学者开发—第3部分:编写第一个Windows Phone 8应用程序 原文地址: http://channel9.msdn.com/Series/Windows- ...