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)当最短路径相同时,输出最小花费 ...
随机推荐
- bootstrap入门案例
创建文档基本结构, 包括导入CSS,JS bootstrap初学者模板 添加元件 先添加一个导航栏, 直接粘贴即可使用 https://v4.bootcss.com/docs/4.0/componen ...
- Codeforces#514E(贪心,并查集)
#include<bits/stdc++.h>using namespace std;long long w[100007],sum[100007];int fa[100007],degr ...
- 51nod1091(贪心)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1091 题意:中文题诶- 思路:贪心: 我们先将数据按照左端点 ...
- python-django框架中使用七牛云
1:注册七牛云账号 https://www.qiniu.com/ js文件 链接:https://pan.baidu.com/s/1BW1svHqEsXrrTNtRobKkpg 提取码:ixta 2 ...
- Click: 命令行工具神器
Click是一个Python用来快速实现命令行应用程序的包,主要优势表现在以下三点: 任意嵌套命令 自动生成帮助页 自动运行时lazy加载子命令 示例程序: import click @click.c ...
- Unity---DOTween插件学习(3)---获取数据、协程、路径动画
目录 10.获取数据 11.携程 12.路径动画 本文及系列参考于Andy老师的DOTween系列 欢迎大家关注Andy老师 10.获取数据 类方法 返回所有暂停的动画,没有则返回null var l ...
- Vue-multiselect详解(Vue.js选择框解决方案)
github地址:https://github.com/shentao/vue-multiselect 官网链接:https://vue-multiselect.js.org/#sub-getting ...
- PHPExcel探索之旅---阶段三 绘制图表
利用PHPExcel插件进行绘制图表 <?php /** * 使用PHPExcel插件在excel文件中利用其中的数据建立折线图 * */ $dir = dirname(__FILE__); r ...
- spring不同环境下用不同的配置文件
@Configuration @PropertySource("xx-${spring.profiles.active}.properties") public class Top ...
- Hive 基本语法操练(三):分区操作和桶操作
(一)分区操作 Hive 的分区通过在创建表时启动 PARTITION BY 实现,用来分区的维度并不是实际数据的某一列,具体分区的标志是由插入内容时给定的.当要查询某一分区的内容时可以采用 WHER ...