hdu 3790 最短路径问题(两个限制条件的最短路)

2024-08-28 10:38

本文主要是介绍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 最短路径问题(两个限制条件的最短路)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114529

相关文章

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

element-ui下拉输入框+resetFields无法回显的问题解决

《element-ui下拉输入框+resetFields无法回显的问题解决》本文主要介绍了在使用ElementUI的下拉输入框时,点击重置按钮后输入框无法回显数据的问题,具有一定的参考价值,感兴趣的... 目录描述原因问题重现解决方案方法一方法二总结描述第一次进入页面,不做任何操作,点击重置按钮,再进行下

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专

mysql主从及遇到的问题解决

《mysql主从及遇到的问题解决》本文详细介绍了如何使用Docker配置MySQL主从复制,首先创建了两个文件夹并分别配置了`my.cnf`文件,通过执行脚本启动容器并配置好主从关系,文中还提到了一些... 目录mysql主从及遇到问题解决遇到的问题说明总结mysql主从及遇到问题解决1.基于mysql

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

如何安装HWE内核? Ubuntu安装hwe内核解决硬件太新的问题

《如何安装HWE内核?Ubuntu安装hwe内核解决硬件太新的问题》今天的主角就是hwe内核(hardwareenablementkernel),一般安装的Ubuntu都是初始内核,不能很好地支... 对于追求系统稳定性,又想充分利用最新硬件特性的 Ubuntu 用户来说,HWEXBQgUbdlna(Har