hdu-3790 最短路径问题---dijkstra两重权值
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=3790
题目大意:
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。
解题思路:
在最短距离的基础上加上一个数组维护花费,每次更新时,先保持距离最短,在同等距离的时候保持花费最小。(注意有重边,更新最短距离和在该距离下的最小花费)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = + ;
const int INF = 0x3f3f3f3f;
int Map[maxn][maxn];
int Map1[maxn][maxn];
int v[maxn], d[maxn], d1[maxn];
int n, m;
void dijkstra(int s, int t)
{
memset(v, , sizeof(v));
for(int i = ; i <= n; i++)d[i] = (i == s ? : INF);
for(int i = ; i <= n; i++)d1[i] = (i == s ? : INF);
for(int i = ; i < n; i++)
{
int x, m = INF, m1 = INF;
for(int i = ; i <= n; i++)
{
if(v[i])continue;
if(m > d[i])
{
m = d[i];
m1 = d1[i];
x = i;
}
else if(m == d[i] && m1 > d1[i])
{
m1 = d1[i];
x = i;
}
}
v[x] = ;
for(int i = ; i <= n; i++)
{
if(v[i])continue;
if(d[i] > d[x] + Map[x][i])
{
d[i] = d[x] + Map[x][i];
d1[i] = d1[x] + Map1[x][i];
}
else if(d[i] == d[x] + Map[x][i] && d1[i] > d1[x] + Map1[x][i])
{
d1[i] = d1[x] + Map1[x][i];
}
}
}
printf("%d %d\n", d[t], d1[t]);
}
int main()
{
while(scanf("%d%d", &n, &m) != EOF && n)
{
int u, v, w, c;
memset(Map, INF, sizeof(Map));
memset(Map1, INF, sizeof(Map1));
while(m--)
{
scanf("%d%d%d%d", &u, &v, &w, &c);
if(Map[u][v] > w)
{
Map[u][v] = Map[v][u] = w;
Map1[u][v] = Map1[v][u] = c;
}
else if(w == Map[u][v] && Map1[u][v] > c)
{
Map1[u][v] = Map1[v][u] = c;
}
}
scanf("%d%d", &u, &v);
dijkstra(u, v);
}
}
hdu-3790 最短路径问题---dijkstra两重权值的更多相关文章
- 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,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费 ...
- POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3790 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你 ...
- HDU 3790(两种权值的迪杰斯特拉算法)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=3790 最短路径问题 Time Limit: 2000/1000 MS (Java/Others) ...
- 题解报告:hdu 3790 最短路径问题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起 ...
- Dijkstra算法为什么权值不能为负
Dijkstra算法当中将节点分为已求得最短路径的集合(记为S)和未确定最短路径的个集合(记为U),归入S集合的节点的最短路径及其长度不再变更,如果边上的权值允许为负值,那么有可能出现当与S内某点(记 ...
- HDU 1863:畅通project(带权值的并查集)
畅通project Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu1245 两个权值的最短路
题意: 求s到t的最短路,如果路径相同求那么要求另一个权值尽可能的小. 思路: 水题,就是spfa的比较那个地方多了一个可以更新的机会,当(s_x[xin] > s_x[ ...
- hdu 3790 最短路径问题(双重权值,dijkstra算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 题目大意:题意明了,输出最短路径及其花费. 需要注意的几点:(1)当最短路径相同时,输出最小花费 ...
随机推荐
- rgbdslam_v2编译过程中引起的needed by错误
Ubuntu16.04,ROS kinectic 报错信息为“ make[2]: *** No rule to make target '/home/william/slam/g2o/lib/libg ...
- iOS端实现节日换肤
本文是我在网上看到一篇不错的文章,因为之前没接触过,所以特意转过来,和大家一起分享下..以下正文: 一.问题的提出 不知道大家有没有发现, 元旦期间, 很多APP界面里的图标都换成了具有节日气氛的样式 ...
- 黑匣子_NOI导刊2010提高(06) Splay Tree
题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两种: ...
- 牛客练习赛41D(思维转化)
AC通道 要点 思路:题解中将所求进行转化\[max\{相似度\} = max\{M-不相似度\} = M-min\{不相似度\}\]因此转化为求某01串T与所给众S串的最小不相似度,而最终答案是选取 ...
- lintcode-dfs实现二叉树的层序遍历
class Solution { /** * @param root: The root of binary tree. * @return: Level order a list of lists ...
- beeline连接hive
beeline -u jdbc:hive2://192.168.1.77:10000 zeppelin default jdbc: jdbc:hive2://nn01.ooccpp.com:2181/ ...
- 练习九:time.sleep方法
让python程序暂停预定时间后再运行,需要用到time.sleep方法要求,随便写入一段代码,测试time.sleep方法 import time dict1 = {1:'a',2:'b',3:'c ...
- 使用C#连接 MyCat 链接串
所属专栏: mycat的安装部署以及监控和运维 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u014180504/article/detai ...
- Win10创建还原点
Win + E打开任务管理器 右击此电脑,选择属性 单击高级系统设置 选择系统保护 单击系统还原 按照提示操作,OK.
- windows下显示隐藏的文件
文件--文件夹选项---查看---高级设置----隐藏文件和文件夹----显示隐藏的文件.文件夹和驱动器