PAT甲级-1003 Emergency

news2024/12/23 16:53:46

题目

题目大意

给出n个城市的连通图,其中共有m条边,起点为C1,终点为C2。每个城市都有一定数目的救援队,现从C1出发,每经过一个城市,都可以加上这个城市的救援队。要求从C1到C2最短路径的个数,并输出最短路径中最大的救援队数量

思路

固定源点求最短路径,用迪杰斯特拉算法。该题又多了两个要求,一个是最短路径的数目,另一个是最大救援队的数目。迪杰斯特拉算法中用到3个数组,分别是bool类型的b数组,判断各节点是否被访问过;path数组,存储最短路径的长度;temp数组,存储临时的路径长度。所以还需要再加上num数组,求最短路径的个数;res数组,存储最大救援队的数目。这两个数组可以参与到temp数组的更新中。

多个最短路径:如果temp[i] == temp[now] + g[now][i],说明找到了另外一条最短路径,num[i] += num[now],累加。还要更新救援队数目,取两者中最大的,res[i] = max(res[i], res[now] + rescue[i])。如果当前只有一个最短路径,正常更新就可以。

需要注意,初始化图时,自己和自己是连通的,距离为0;num[C1]要初始化为1,自己到自己有一条路径,后续更新路径时,有重复路径累加,没有就继承。

知识点

num.resize(n, 0);  // 初始化vector数组的大小和元素值

代码

#include <iostream>
#include <vector>
#include <climits>
#include <cmath>
using namespace std;

int n, m, c1, c2;
int g[501][501] = {0};
vector<int> rescue;  // 各城市救援队的数目
vector<int> path;  // 记录最短路径的长度
vector<bool> b;  // 标记是否被访问过
vector<int> temp;  // 存放目前的路径长度
vector<int> num;  // 到达每个节点的最短路径的数量
vector<int> res;  // 记录最大救援队数

void dijie(int start){
    temp[start] = 0;
    path[start] = 0;
    res[start] = rescue[start];
    num[start] = 1;  // 自己到自己的路径只有一条

    for (int count = 0; count < n; count++) {
        int now = -1, minl = INT_MAX;
        // 找到当前未访问的节点中,距离最小的节点
        for (int i = 0; i < n; i++) {
            if (!b[i] && temp[i] < minl) {
                minl = temp[i];
                now = i;
            }
        }
        if (now == -1) break;  // 如果未找到合适的节点,说明所有节点已访问
        b[now] = true;

        // 更新邻接节点的距离
        for (int i = 0; i < n; i++) {
            if (!b[i] && g[now][i] < INT_MAX) {  // 如果 i 节点未访问并且与 now 有边
                if (temp[i] > temp[now] + g[now][i]) {
                    // 找到更短路径
                    temp[i] = temp[now] + g[now][i];
                    path[i] = temp[i];
                    num[i] = num[now];  // 更新最短路径的数量
                    res[i] = res[now] + rescue[i];  // 更新最大救援队数量
                } else if (temp[i] == temp[now] + g[now][i]) {
                    // 找到相同长度的最短路径
                    num[i] += num[now];
                    res[i] = max(res[i], res[now] + rescue[i]);  // 更新救援队数量
                }
            }
        }
    }
}

int main() {
    cin >> n >> m >> c1 >> c2;
    rescue.resize(n);
    for (int i = 0; i < n; i++) {
        cin >> rescue[i];
    }

    // 初始化图
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            g[i][j] = (i == j ? 0 : INT_MAX);  // 初始化自己到自己为 0,其他为无穷大
        }
    }
    for (int i = 0; i < m; i++) {
        int v1, v2, w;
        cin >> v1 >> v2 >> w;
        g[v1][v2] = g[v2][v1] = w;  // 无向图
    }

    path.resize(n, INT_MAX);  // 初始化路径为无穷大
    b.resize(n, false);  // 初始化所有节点未访问
    temp.resize(n, INT_MAX);  // 初始化临时数组为无穷大
    num.resize(n, 0);  // 初始化路径数量
    res.resize(n, 0);  // 初始化救援队数量

    dijie(c1);

    cout << num[c2] << " " << res[c2] << endl;

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2217423.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AIGC技术的学习 系列一

文章目录 前言一、AIGC技术演进1.1 图像视频生成1.2. 文本生成1.3. 多模态生成1.4. 小结二、CAD&CAE软件介绍2.1. CAD软件2.2. CAE软件2.3. 小结三、AIGC技术与CAD&CAE软件的集成案例3.1. 土建设计领域3.2. 机械设计领域四、结语五、参考文献总结前言 在全球智能制造的…

FreeRTOS - 信号量

在学习FreeRTOS过程中&#xff0c;结合韦东山-FreeRTOS手册和视频、野火-FreeRTOS内核实现与应用开发、及网上查找的其他资源&#xff0c;整理了该篇文章。如有内容理解不正确之处&#xff0c;欢迎大家指出&#xff0c;共同进步。 队列用于传输数据&#xff1a;在任务之间、任务…

冻干咖啡市场洞察:销售额占比背后的消费密码

冻干咖啡销售额前十占比分析 一、概述 本报告基于从淘宝商品搜索接口和淘宝精确月销量接口中提取的数据&#xff0c;分析了前十个品牌在销售额上的占比情况。分析涵盖了销售额和占比的数据&#xff0c;为决策提供了依据。&#xff08;数据获取时间&#xff1a;2024.09.20&…

音乐播放器项目专栏介绍​

1.简介 本专栏使用Qt QWidget作为显示界面&#xff0c;你将会学习到以下内容&#xff1a; 1.大量ui美化的实例。 2.各种复杂ui布局。 3.常见显示效果实现。 4.大量QSS实例。 5.Qt音频播放&#xff0c;音乐歌词文件加载&#xff0c;展示。 6.播放器界面换肤。 相信学习了本专栏…

C++【内存管理】(超详细讲解C++内存管理以及new与delete的使用和原理)

文章目录 1.C/C内存分布2.C语言中动态内存管理方式3.C内存管理方式3.1 new/delete操作内置类型3. 2new/delete操作自定义类型 4. operator new与operator delete函数&#xff08;重点&#xff09;5. new和delete的实现原理5.1 内置类型5.2 自定义类型5.2.1 自定义类型调用new[]…

【机器学习】特征降维|低方差过滤|主成分分析PCA|相关系数法|皮尔逊相关系数|斯皮尔曼相关系数

特征降维 特征降维 为什么要进行特征降维? 特征对训练模型非常重要,当用于训练的数据集包涵一些不重要的特征时,可能会导致模型泛化性能不加 eg&#xff1a;某些特征的取值较为接近&#xff0c;其包含的信息较少eg&#xff1a;希望特征独立存在对预测产生影响&#xff0c;两…

Unity使用TriangleNet参考

TriangleNet下载如下&#xff1a; TriangleNet 效果如下&#xff1a; 代码参考如下&#xff1a; using System.Collections.Generic; using UnityEngine; using TriangleNet.Geometry;public class TestTriangleNet : MonoBehaviour {[SerializeField]Material material;voi…

2024下半年,国内大模型六小虎最新发展情况怎么样了?

最近大模型圈有点冷,ChatGPT访问量下降,英伟达的股价都跟着跌,更是有人开始唱衰大模型。这感觉就像经历了一场盛夏酷暑后的骤然降温,资本市场也开始理性回归。但与此同时,国内的"六小虎"却展现出另一番景象——热火朝天!这真是冰火两重天啊! 在这看似矛盾的局…

CNStream流处理多路并发Pipeline框架相关问题整理:Pipeline整体流程、数据传输、多路并发

目录 1 CNStream之前博客汇总 1.1 Pipeline中的EventBus 1.2 Pipeline中的内存池 1.3 Pipeline中的视频解码流程分析 1.4 Pipeline中的视频编码流程分析 1.5 Pipeline中的反射机制 1.6 Pipeline中的单例模式代码 1.7 怎么将CNStream适配到NVIDIA Jetson Orin 2 构建Pi…

EI收录检索报告是什么样的?怎么出具?一文了解!

一、EI检索报告是什么 EI(Engineering Village)数据库是全球最全面的工程检索二次文献数据库&#xff0c;它收录了7,000,000多篇论文的参考文献和摘要。这些论文出自5,000多种工程类期刊、会议论文集和技术报告。EI收录的文献涵盖了所有的工程领域&#xff0c;其中大约22%为会…

聊聊零基础如何开始学习鸿蒙开发技术

鸿蒙系统是一款分布式操作系统&#xff0c;其适用范围非常广泛&#xff0c;从智能手机到家用电器&#xff0c;再到工业设备&#xff0c;都能找到应用场景。特别是在智能家居领域&#xff0c;鸿蒙系统可以实现不同设备之间的无缝连接和协同工作&#xff0c;提供更加智能和便利的…

建筑工程管理软件推荐,2024年最佳选择

建筑工程管理软件助力项目全周期管理&#xff0c;包括规划、监控、资源成本控制等。类型多样&#xff0c;选购需考虑需求匹配、便捷性、集成能力、灵活性和安全性。软件优化流程、提高效率、监控进展、优化资源配置、提升协作水平。 一、建筑工程管理软件到底是什么&#xff1f…

浮点数二进制制科学计数法理解

Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 1. 引言 对于浮点数&#xff0c;主要是单精度-float、双精度-double两种类型。 对于浮点类型&#xff0c;我们知道其采用科学计数法&#xff0c;准确来说应该是二进制科学计数法。 为什么准确说是是二进制科学计数法&…

机器学习笔记20241017

文章目录 torchvisiondataloadernn.module卷积非线性激活模型选择训练误差泛化误差 正则化权重衰退的基本概念数学表示权重衰退的效果物理解释 数值稳定性&#xff08;Gradient Vanishing&#xff09;梯度消失原因解决方法 梯度爆炸&#xff08;Gradient Explosion&#xff09;…

linux anconda下基础环境配置(torch、opencv等)

1、torch安装&#xff08;GPU&#xff09; 下载链接&#xff1a;https://pytorch.org/ 根据配置下载对应版本&#xff0c;CUDA11.4 可用11.3下的安装包 conda install pytorch1.12.0 torchvision0.13.0 torchaudio0.12.0 cudatoolkit11.3 -c pytorch错误解决&#xff1a; 安…

好用的python相关的AI工具Bito介绍

插件名称&#xff1a;Bito 好用的python相关的AI工具Bito介绍 step 1:点插件step 2&#xff1a;搜索bito并安装step3 &#xff1a;需要登录&#xff0c;要有真实邮箱&#xff0c;按步骤走就行&#xff0c;完后就可以使用 step 1:点插件 step 2&#xff1a;搜索bito并安装 step3…

基于PHP考研互助系统【附源码】

基于PHP考研互助系统 效果如下&#xff1a; 系统首页界面 用户注册界面 考研论坛页面 每日打卡页面 管理员登录主页面 管理员主界面 用户管理界面 备考经验界面 研究背景 近些年&#xff0c;随着中国经济发展&#xff0c;人民的生活质量逐渐提高&#xff0c;对网络的依赖性越…

Q2=10 and Q2=1--PLB(Fig.4)

&#xff08;个人学习笔记&#xff0c;仅供参考&#xff09; import numpy as np from scipy.special import kv, erfc from scipy.integrate import dblquad import matplotlib.pyplot as plt import scipy.integrate as spi# Constants w 0.6198 g0_sq 21.5989 rho 0.782…

【UML】一个UML学习的还不错的几个帖子

https://segmentfault.com/a/1190000042775634 寂然解读设计模式 - UML类图&类的六大关系-阿里云开发者社区

【工具变量】上市公司企业广告支出数据(2007-2023年)

一、测算方式&#xff1a;具体而言&#xff0c;参照 Lu 等&#xff08;2022&#xff09;的研究&#xff0c;本文通过上市公司财务报表附注获取每家上市公司每年销售费用明细项目&#xff0c;筛选出广告费、广告宣传费、广告推广费、广告策划费、广告展览费等与广告支出相关的项…