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 ...
随机推荐
- Java基础--finalize()方法
原理: 一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并在下一次垃圾回收动作发生时,才会真正回收对象占用的内存. 用途: 1)释放通过某种创建对象方式以外的方式为对 ...
- Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图
Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图 在本节中,您需要修改HelloWorldController类,从而使用视图模板文件,干净优雅的封装生成返回到客户端浏览器HTML ...
- ubuntu之安装java浏览器插件
最近搞什么openstack,在浏览器访问远程虚拟机的时候,需要浏览器有支持java.这个之前真没注意过呢, 通过自己的实践写点东西,方便一下你们搞: 1,首先去http://www.java.com ...
- JavaSE学习总结第21天_IO流3
21.01 转换流出现的原因及格式 由于字节流操作中文不是特别方便,所以,java就提供了转换流. 字符流 = 字节流 + 编码表 21.02 编码表概述和常见编码表 编码表:计算机只能识别二 ...
- BZOJ 1880: [Sdoi2009]Elaxia的路线( 最短路 + dp )
找出同时在他们最短路上的边(dijkstra + dfs), 组成新图, 新图DAG的最长路就是答案...因为两人走同一条路但是不同方向也可以, 所以要把一种一个的s,t换一下再更新一次答案 ---- ...
- Oracle语句优化规则(一)
1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化 ...
- CentOS搭建PHP服务器环境(LAMP)
安装httpd mysql mysql-server php: yum install -y httpd mysql mysql-server php php-devel 安装php的扩展 yum i ...
- linux下面安装软件学习流程
先不要急着配置LNMP 我相信你的LINUX基础一定很差,先去学LINUX. 基础最重要. 凡事都要先从基础搞起. 再把gcc搞搞. gcc的相关参数很多,多了解一下. 想要编译安装,不对gcc有些了 ...
- Java疯狂讲义(二)
- Python转码问题的解决方法:ignore,replace,xmlcharrefreplace
比如,若要将某个String对象s从gbk内码转换为UTF-8,可以如下操作 s.decode('gbk').encode('utf-8′) 可是,在实际开发中,我发现,这种办法经常会出现异常: Un ...