hdu 3790 最短路径问题(两个限制条件的最短路)
http://acm.hdu.edu.cn/showproblem.php?pid=3790
有两个条件:距离和花费。首先要求距离最短,距离相等的条件下花费最小。
dijkstra,仅仅是在推断条件时多考虑了花费。
注意重边。
#include <stdio.h>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <math.h>
#include <string.h>
#include <stack>
#include <queue>
#define LL long long
#define _LL __int64
using namespace std; const int INF = 0x3f3f3f3f;
const int maxn = 1010;
int Map[maxn][maxn],cost[maxn][maxn];
int n,m;
int dis1[maxn],dis2[maxn]; void init()
{
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
if(i == j)
{
Map[i][j] = 0;
cost[i][j] = 0;
}
else
{
Map[i][j] = INF;
cost[i][j] = INF;
}
}
}
} void dijkstra(int s, int t)
{
int vis[maxn];
memset(dis1,INF,sizeof(dis1));
memset(dis2,INF,sizeof(dis2));
memset(vis,0,sizeof(vis)); for(int i = 1; i <= n; i++)
{
dis1[i] = Map[s][i];
dis2[i] = cost[s][i];
}
vis[s] = 1; for(int i = 1; i <= n; i++)
{
int M1= INF, M2 = INF, pos; for(int j = 1; j <= n; j++)
{
if(vis[j]) continue;
if(dis1[j] < M1 || (dis1[j] == M1 && dis2[j] < M2))
{
M1 = dis1[j];
M2 = dis2[j];
pos = j;
}
} vis[pos] = 1; for(int j = 1; j <= n; j++)
{
if(vis[j]) continue;
int tmp1 = dis1[pos] + Map[pos][j];
int tmp2 = dis2[pos] + cost[pos][j];
if(tmp1 < dis1[j] || (tmp1 == dis1[j] && tmp2 < dis2[j]))
{
dis1[j] = tmp1;
dis2[j] = tmp2;
}
}
}
} int main()
{
while(~scanf("%d %d",&n,&m))
{
if(n == 0 || m == 0) break;
init();
int a,b,d,p;
while(m--)
{
scanf("%d %d %d %d",&a,&b,&d,&p);
if(Map[a][b] == INF && cost[a][b] == INF)
{
Map[a][b] = Map[b][a] = d;
cost[a][b] = cost[b][a] = p;
}
else if(d < Map[a][b] || (Map[a][b] == d && cost[a][b] > p))
{
Map[a][b] = Map[b][a]= d;
cost[a][b] = cost[b][a] = p;
}
}
scanf("%d %d",&a,&b);
dijkstra(a,b);
printf("%d %d\n",dis1[b],dis2[b]);
}
return 0;
}
hdu 3790 最短路径问题(两个限制条件的最短路)的更多相关文章
- ACM: HDU 3790 最短路径问题-Dijkstra算法
HDU 3790 最短路径问题 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Des ...
- HDU - 3790 最短路径问题 (dijkstra算法)
HDU - 3790 最短路径问题 Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费 ...
- HDU 3790最短路径问题 [最短路最小花费]
题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=3790] 最短路径问题 Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 3790 最短路径问题(双重权值,dijkstra算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 题目大意:题意明了,输出最短路径及其花费. 需要注意的几点:(1)当最短路径相同时,输出最小花费 ...
- HDU 3790 最短路径问题 (最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 简单的最短路问题,这题听说有重边.我用spfa和dijkstra写了一遍,没判重边,速度都差不多 ...
- #HDU 3790 最短路径问题 【Dijkstra入门题】
题目: 最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 题解报告:hdu 3790 最短路径问题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起 ...
- hdu 3790 最短路径问题(迪杰斯特拉)
最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- hdu 3790 最短路径dijkstra(多重权值)
最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
随机推荐
- hdu 1074(状态压缩dp+记录路径)
题意:给了n个家庭作业,然后给了每个家庭作业的完成期限和花费的实践,如果完成时间超过了期限,那么就要扣除分数,然后让你找出一个最优方案使扣除的分数最少,当存在多种方案时,输出字典序最小的那种,因为题意 ...
- C#中的枚举类型(enum type)
ylbtech 原文 C#中的枚举类型(enum type) 概念 枚举类型(enum type)是具有一组命名常量的独特的值类型.在以下示例中: enum Color { Red, Green, B ...
- 理解Mysql的索引与优化
转自:http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html 写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库 ...
- 搭建XMPP协议,实现自主推送消息到手机
关于服务器端向Android客户端的推送,主要有三种方式: 1.客户端定时去服务端取或者保持一个长Socket,从本质讲这个不叫推送,这是去服务端拽数据.但是实现简单,主要缺点:耗电等 2.Googl ...
- R 安装与环境配置
R语言是一种很方便的应用于科学计算的语言,推荐给大家学习. 由于R的版本对程序包的兼容有些问题,推荐使用2.15.3. 下面给出下载链接,安装一路默认即可,可以自己更存放目录,其他的都没有影响.下面是 ...
- Page 63-64 Exercises 2.3.7 -------Introduction to Software Testing (Paul Ammann and Jeff Offutt)
Use the following method printPrimes() for question a-d below //Find and prints n prime integers pri ...
- dom 关键字提示
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 【转】Hive学习路线图
原文博客出自于:http://blog.fens.me/hadoop-hive-roadmap/ 感谢! Hive学习路线图 Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Ha ...
- HDFS的Shell
调用文件系统(FS)Shell命令应使用 $HADOOP_HOME/bin/hadoop fs 的形式. 所有的FS Shell命令使用URI路径作为参数. URI格式是scheme://author ...
- Apache Spark shell的实例操作
1.scala> val inFile = sc.textFile("./spam.data") 作用是将spam.data当作文本文件加载到Spark中,将spam.dat ...