L2-001紧急救援_最短路径

2023-11-08

PTA | 程序设计类实验辅助教学平台千名教师建设,万道高质量题目,百万用户拼题的程序设计实验辅助教学平台https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840

#include <bits/stdc++.h>
#define x first
#define y second
#define INF 0x3f3f3f
using namespace std;
typedef long long ll;
const int N = 512;
int n, m, s, d;
int num[N] = { 0 }, vis[N] = { 0 };
int cnt[N] = { 0 }, pre[N] = { 0 };
int g[N][N] = { 0 }, have[N] = { 0 };
int main() {
    // system("chcp 65001");
    // freopen("C:/Users/zhaochen/Desktop/input.txt", "r", stdin);
    cin.tie(0);
    cout.tie(0);
    memset(g, INF, sizeof(g));
    cin >> n >> m >> s >> d;
    for (int i = 0; i < n; i++) {
        cin >> num[i];
        cnt[i] = 1;
    }
    for (int i = 0; i < n; i++) {
        if (i != s) {
            have[i] = num[s] + num[i]; // have[i]存从s到i能得到的人数
        }
    }
    for (int i = 0; i < m; i++) {
        int a, b, len;
        cin >> a >> b >> len;
        g[a][b] = g[b][a] = len;
    }
    vis[s] = 1;
    for (int i = 1; i < n; i++) { // 在还未访问过的点中找最近的一个
        int minDis = INF, flag = 0;
        for (int j = 0; j < n; j++) {
            if (!vis[j] && g[s][j] < minDis) {
                minDis = g[s][j];
                flag = j;
            }
        }
        vis[flag] = 1;
        for (int j = 0; j < n; j++) {
            if (!vis[j]) {
                if (g[s][flag] + g[flag][j] < g[s][j]) {
                    cnt[j] = cnt[flag]; // 从s到j的最短路径的条数
                    g[s][j] = g[s][flag] + g[flag][j];
                    have[j] = have[flag] + num[j];
                    pre[j] = flag;
                } else if (g[s][flag] + g[flag][j] == g[s][j]) {
                    cnt[j] += cnt[flag];
                    if (have[j] < have[flag] + num[j]) {
                        have[j] = have[flag] + num[j];
                        pre[j] = flag;
                    }
                }
            }
        }
    }
    cout << cnt[d] << " " << have[d] << endl;
    int t = d;
    vector<int>road;
    while (t != s) {
        road.push_back(pre[t]);
        t = pre[t];
    }
    for (int i = road.size() - 1; i >= 0; i--) {
        cout << road[i] << " ";
    }
    cout << d;
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

L2-001紧急救援_最短路径 的相关文章

随机推荐

  • 感知器算法c语言,一文搞懂感知机算法

    什么是感知机 感知机 preceptron 是线性分类的二分类模型 输入为实例的特征向量 输出为实例的类别 分别用 1 和 1 表示 感知机将输入空间 特征空间 中的实例划分为正负两类分离的超平面 旨在求出将训练集进行线性划分的超平面 为此
  • BlueCMS漏洞,靶场学习心得(上)

    1 点击传送门进入网站 使用dirmap对网站做目录遍历 找到网站后台 2 找到后台以后 下一步的思路是获取管理员账号密码 通过观察网站页面可知使用的是BlueCMS v1 6 我也是第一次接触 好像是个网站支撑的东西 百度了一下发现是一个
  • Python工程师(爬虫方向)岗位职责解析

    岗位职责 1 负责爬虫各个系统核心代码搭建 性能方面的优化 解决相关的疑难问题 2 负责研究各种网站 网页 链接的形态 发现它们的特点和规律 3 设计各种策略和算法 提高数据抓取的效率和质量 解决数据的重复 垃圾数据识别 4 提高系统的可运
  • ant design vue table单元格编辑,点击全部显示可编辑单元

    借鉴官方的示例我们往里面插入一个select标签使用 在删除操作时候 对tableData数据直接进行删除操作 不涉及调用接口 打印数据可以看出指定行的数据已经删除 但是在select里面剩下的数据并没有改变 这种情况出现在从上往下删除的时
  • 解决Jquery动态给表格赋值时空格后面的内容不显示的问题

    如果从数据库读取的数据为A001 002 003 由于没有给数据加引号 并且会自动给A001加引号 结果就变成了 A001 002 003 所以我们在前端看到的数据只有A001 方法1
  • Qt软件发布教程(生成安装包)inno setup打包工具的使用

    一 生成exe软件 首先要用QT生成ex文件 要保证exe文件能够运行 否则生成的安装包也是不能运行的 比如这样 其中很多的DLL运行环境都要放到里面 二 用inno setup软件生成脚本文件 1 选择创建新的空白脚本文件 点击确next
  • 解决java compiler level does not match the version of the installed java project facet

    java compiler level does not match the version of the installed java project facet错误的解决 因工作的关系 Eclipse开发的Java项目拷来拷去 有时候会
  • 拖拽式机器学习

    拖拽式机器学习的爱与恨 发表于 2017年3月27日 由 lili 文章目录 隐藏 1 前世今生 2 爱 3 恨 4 总结 拖拽式机器学习是我想了很久的问题 1 前世今生 拖拽式机器学习是 人们在界面上通过拖拽就是建立机器学习过程 拖拽式机
  • 将数组一次性拷贝到vector的一种方法

    主要是利用vector reserve vector resize和memcpy或者assign这几个函数 stl容器中size resize reserve capacity 为两对对应接口 vector为保持高速随机访问 采用连续内存分
  • 【翠花学Maven】Maven详解

    Maven的作用和定义 定义 Maven是一个跨平台的项目管理工具 是Apache组织中的一个颇为成功的开源项目 Maven主要服务基于java的项目构建 项目信息管理和依赖管理 作用 1 Maven可以创建项目 2 Maven可以引入依赖
  • 2016年蓝桥杯 —— 第十题

    最大比例 X星球的某个大奖赛设了M级奖励 每个级别的奖金是一个正整数 并且 相邻的两个级别间的比例是个固定值 也就是说 所有级别的奖金数构成了一个等比数列 比如 16 24 36 54 其等比值为 3 2 现在 我们随机调查了一些获奖者的奖
  • python解决一元二次方程

    题目 求一元二次方程ax x b x c 0的解 从键盘输入a b c的值 分多种情况输出解 a等于0 b也等于0时 输出 方程无解 a等于0 b不等于0时 输出 方程有1个解 x 表示方程的解 a不等于0时 计算判别式d b b 4 a
  • Java启动参数、调优及分析

    java启动参数共分为三类 其一是标准参数 所有的JVM实现都必须实现这些参数的功能 而且向后兼容 其二是非标准参数 X 默认jvm实现这些参数的功能 但是并不保证所有jvm实现都满足 且不保证向后兼容 其三是非Stable参数 XX 此类
  • Linux系统运维常见面试题汇总

    一 填空题 1 在Linux 系统 中 以文件方式访问设备 2 Linux 内核引导时 从文件 etc fstab中读取要加载的文件系统 3 Linux 文件系统中每个文件用indoe节点来标识 4 全部磁盘块由四个部分组成 分别为引导块
  • 心态:晋升的为什么不是你--架构师之道

    2011年底的时候 在网上看了一篇文章 能让你少奋斗10年的工作经验 其中大部分条目与工作态度相关 有实例 可操作 故有此感慨 职场纵横 如果下面8条 你也符合部分状态 或许 这就是 晋升的为什么不是你 的答案了 一 心灵停留在舒适区是不可
  • 第二章——递归

    递归的定义 递归算法 递归模型 递归栈 递归树 在数学和计算机科学中 递归是指在在一个过程或函数的定义时出现调用本过程或本函数的成分 若在函数中调用函数自身或者在过程的子部分中调用子部分自身的内容 称之为直接递归 又称自递归 若不同的函数和
  • mock静态方法指引

    mock静态方法指引 mockito 在3 4 0版本开始支持mock static method 文档 https wttech blog blog 2020 mocking static methods made possible in
  • 爬取实时航班信息 - 从航班信息网站获取实时航班信息

    目录 1 选择目标航班信息网站 2 分析网站结构 3 准备工具和库 4 编写爬虫程序
  • 软件测试功能到自动化学习路线图,2022年最新版技术栈

    2022年全新版软件测试技术栈 零基础入行必备 高质量免费在线课程 笔记 讲义分享 适合零基础 功能测试 即将面试回顾知识点的各位伙伴 文章目录 前言 第一阶段 功能测试 1 软件测试入门到精通 2 Linux系统2天快速入门 3 软件测试
  • L2-001紧急救援_最短路径

    PTA 程序设计类实验辅助教学平台千名教师建设 万道高质量题目 百万用户拼题的程序设计实验辅助教学平台https pintia cn problem sets 994805046380707840 problems 994805073643