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 ...
随机推荐
- js 只能输入数字和小数点
<html><head><meta http-equiv="content-Type" content="text/html;charset ...
- VB6.0编程笔记——(1)篇外篇&目录
从计算机专业毕业到进入IT行业,说来也有些年头了.相比较而言算是幸运,也有很多的同学进入了其他行业,也有一些朋友又想进入这个行业.现在回想自己的一路历程,总结一下,也是一份记忆. 基于以上的原因,希望 ...
- 读取raw目录中的文件数据
try { InputStream is2 = getResources().openRawResource(R.raw.info); InputStreamReader isr2 = new Inp ...
- Java并发编程-synchronized
多线程的同步机制对资源进行加锁,使得在同一个时间,只有一个线程可以进行操作,同步用以解决多个线程同时访问时可能出现的问题.同步机制可以使用synchronized关键字实现.synchronized关 ...
- python的使用环境总结
python在linux上运行,使用的是vim,每次都是敲四个空格进行缩进,真尼玛的蛋疼,书本果然是个好东西,从而根据书本python高级编程中的设置配置而来: 1.进行自动补全的脚本 [root@p ...
- Eclipse安装插件的方式
Eclipse有两种安装插件的方式,分为在线安装和手动安装,因为受到网络环境限制,推荐采用手动安装的方式,下面我们先来了解一下Eclipse手动安装插件的步骤. Eclipse手动安装插件: 第一种: ...
- 一道关于java 类初始化 成员初始化的笔试题的解析
代码如下: java笔试题public class Mapplication { private static int n; private static Mapplication m1 = new ...
- 20 个超酷的 HTML5/CSS3 应用及源码
[导读] 1.HTML5视频破碎重组特效,强大视觉冲击HTML5视频播放器很多,但是HTML5视频特效还是很少见的,这款HTML5视频破碎重组特效非常刺激,给人强大的视觉冲击.点击视频任意地方,HTM ...
- .NET在IE9中页面间URL传递中文变成乱码的解决办法
在.Net的项目中,鼠标点击查询按钮,转到查询页面,但URL中包含中文时,传到服务器端后,中文变成了乱码(只有IE9出现该问题). 尝试使用Server.UrlEncode()进行编码, ...
- 得到python某个模块的路径
#-*-coding:utf-8-*- # 导入imp模块 import imp # 打印出MySQLdb模块 print imp.find_module("MySQLdb")