PTA L2-001 紧急救援

news2024/10/7 19:26:04

作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。

输入格式:

输入第一行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0 ~ (N−1);M是快速道路的条数;S是出发地的城市编号;D是目的地的城市编号。

第二行给出N个正整数,其中第i个数是第i个城市的救援队的数目,数字间以空格分隔。随后的M行中,每行给出一条快速道路的信息,分别是:城市1、城市2、快速道路的长度,中间用空格分开,数字均为整数且不超过500。输入保证救援可行且最优解唯一。

输出格式:

第一行输出最短路径的条数和能够召集的最多的救援队数量。第二行输出从S到D的路径中经过的城市编号。数字间以空格分隔,输出结尾不能有多余空格。

输入样例:

4 5 0 3
20 30 40 10
0 1 1
1 3 2
0 3 3
0 2 2
2 3 2

输出样例:

2 60
0 1 3

代码: 

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>

using namespace std;

typedef pair<int,int> PII;
const int N = 510;

int g[N][N];//图
int n,m,s,d;
int dist[N],st[N];//一般所需
int p[N],cnt[N],sum[N],pre[N];//额外所需

void dijkstra()
{
    memset(dist,0x3f,sizeof dist);
    //memset(pre,-1,sizeof pre);
    dist[s] = 0;
    pre[s] = -1;cnt[s] = 1;sum[s] = p[s];

    priority_queue<PII,vector<PII>,greater<PII>> heap;
    heap.push({0,s});

    while(heap.size())
    {
        int t = heap.top().second;
        heap.pop();

        if(st[t]) continue;
        st[t] = 1;

        for(int i = 0;i < n;i++)
        {
            if(st[i]) continue;
            if(dist[i] > dist[t] + g[t][i])//第一条被确定的最短路
            {
                dist[i] = dist[t] + g[t][i];
                heap.push({dist[i],i});
                
                cnt[i] = cnt[t];
                sum[i] = p[i] + sum[t];
                pre[i] = t;
            }
            else if(dist[i] == dist[t] + g[t][i])//其他的最短路
            {
                cnt[i] += cnt[t];
                if(sum[i] < sum[t] + p[i])
                {
                    sum[i] = sum[t] + p[i];
                    pre[i] = t;
                }
            }
        }
    }
    
}

void print(int id)
{
    if(pre[id] != -1) print(pre[id]);
    if(pre[id] != -1) cout << " ";
    cout << id;
}
int main()
{
    memset(g,0x3f,sizeof g);
    cin >> n >> m >> s >> d;
    for(int i = 0; i < n;i++) cin >> p[i];
    for(int i = 0;i < m;i++)
    {
        int a,b,c;
        cin >> a >> b >> c;
        g[a][b] = g[b][a] = min(g[a][b],c);
    }

    dijkstra();

    cout << cnt[d] << " " << sum[d] << endl;
    print(d);//路径
    return 0;
}

结果:

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

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

相关文章

leetcode 热题 100_最小覆盖子串

题解一&#xff1a; 双指针滑动窗口&#xff1a;暴力解法——用双指针来表示字符串s中的子串首尾&#xff0c;遍历所有子串并与字符串t判断是否符合条件。我们可以对遍历和判断的过程进行优化&#xff0c;首先是遍历&#xff0c;右指针先移动直到涵盖所以需要的字母&#xff0c…

大数据技术学习笔记(五)—— MapReduce(2)

目录 1 MapReduce 的数据流1.1 数据流走向1.2 InputFormat 数据输入1.2.1 FileInputFormat 切片源码、机制1.2.2 TextInputFormat 读数据源码、机制1.2.3 CombineTextInputFormat 切片机制 1.3 OutputFormat 数据输出1.3.1 OutputFormat 实现类1.3.2 自定义 OutputFormat 2 Map…

【Software Platform Bundle】

https://www.ni.com/zh-cn/support/downloads/software-products/download.software-platform-bundle.html

蓝桥杯倒计时 38 天

整数二分模板&#xff1a;数的范围 二分的本质不是单调性&#xff0c;而是二分出能满足某种性质使得将整数分成两半。 思考&#xff1a;模板题&#xff0c;模板记熟就能做 #include<iostream> using namespace std; int n,q; const int N 1e510; int a[N]; int main…

大海捞针:用代码聚类寻找恶意 PyPI 包(ASE 2023)

A Needle is an Outlier in a Haystack: Hunting Malicious PyPI Packages with Code Clustering Institute of Software, Chinese Academy of Sciences, Beijing, China;University of Chinese Academy of Sciences, Beijing, China Abstract 作为最流行的Python软件存储库&…

Android开发必须会的技能,记得把每一次面试当做经验积累

前言 本来已经在为去大厂工作摩拳擦掌的Android开发者们&#xff0c;今年显得格外艰难&#xff1a; 待就业数高达874万&#xff01;人才竞争加剧&#xff01;疫情让大多数公司的招聘需求缩减&#xff01;人才招聘要求愈来愈高&#xff01; 别说offer&#xff0c;现在出门零活…

Android开发基础面试题,Android保活黑科技的技术实现

前言 Android常用知识体系是什么鬼&#xff1f;所谓常用知识体系&#xff0c;就是指对项目中重复使用率较高的功能点进行梳理。注意哦&#xff0c;不是Android知识体系。 古语道&#xff1a;学而不思则罔&#xff0c;思而不学则殆。如果将做项目类比为“学”&#xff0c;那么…

Unity2023.1.19_DOTS_JobSystem

Unity2023.1.19_DOTS_JobSystem 上篇我们知道了DOTS是包含Entity Component System&#xff0c;Job System&#xff0c;Burst compiler三者的。接下来看下JobSystem的工作原理和具体实现。 简介&#xff1a; 官方介绍说&#xff1a;JobSystem允许您编写简单而安全的多线程代…

【模型训练】-图形验证码识别

针对网站中的图形验证码图片&#xff0c;进行反向的内容识别&#xff0c;支持数字和字母&#xff0c;不区分大小写。 ​​​​​​​​​​​​​​数据集地址 数据格式如下&#xff1a; 1、依赖导入 import os import torch import torch.nn as nn import torch.optim as o…

GPT vs Gemini vs Claude 测试大比拼 到底谁是最强王者?

Anthropic发布的通用大语言模型Claude&#xff0c;在各项能力方面号称是全方面超越GPT&#xff0c;实测究竟如何呢&#xff1f;这次测试顺便把前段时间发布的Gemini拉上一起做对比&#xff01;主要是以一些有趣幽默的脑筋急转弯为题目&#xff0c;来看看不同大模型对此的反馈。…

闰年导致的哪些 Bug

每次闰年对程序员们都是一个挑战&#xff0c;平时运行好好的系统&#xff0c;在 02-29 这一天&#xff0c;好像就会有各种毛病。 虽然&#xff0c;提前一天&#xff0c;领导们都会提前给下面打招呼。但是&#xff0c;不可避免的&#xff0c;今天公司因为闰年还是有一些小故障。…

SpringBoot中集成LiteFlow(轻量、快速、稳定可编排的组件式规则引擎)实现复杂业务解耦、动态编排、高可扩展

场景 在业务开发中&#xff0c;经常遇到一些串行或者并行的业务流程问题&#xff0c;而业务之间不必存在相关性。 使用策略和模板模式的结合可以解决这个问题&#xff0c;但是使用编码的方式会使得文件太多, 在业务的部分环节可以这样操作&#xff0c;在项目角度就无法一眼洞…

Keil软件无法烧录程序的解决方案

1.由于单片机程序有些情况下出错&#xff0c;导致烧录进去单片机运行异常&#xff0c;无法烧录程序&#xff0c;但是Keil软件可以识别到SW Device器件&#xff0c;点击烧录程序提示no target connected连接。 解决方案: (1).点击魔术棒->debug->Settings&#xff0c;选择…

网络编程day6

1.思维导图 2.数据库操作的增、删、改完成。 #include<myhead.h> //定义新增员工信息函数 int do_add(sqlite3 *ppDb) {int numb;char name;double salary;printf("请输入要插入的信息&#xff1a;");scanf("%d%s%d\n",&numb,name,&salary)…

7大必备应用推荐,为你的 Nextcloud 实例增添更多效率功能

适用于 Linux 的开源云存储软件有很多&#xff0c;ownCloud、Seafile 和 Pydio 只是其中的几个。 不过&#xff0c;如果您非常重视安全问题&#xff0c;并希望完全掌管您的数据&#xff0c;可以选择​Nextcloud并将其安装到您的服务器上。​ Nextcloud 是一个基于 PHP 的开源安…

Pytest中实现自动生成测试用例脚本代码!

前言 在Python的测试框架中&#xff0c;我们通常会针对某个系统进行测试用例的维护&#xff0c;在对庞大系统进行用例维护时&#xff0c;往往会发现很多测试用例是差不多的&#xff0c;甚至大多数代码是一样的。 故为了提高我们测试用例维护的效率&#xff0c;在本文中&#…

Java常用笔试题,面试java对未来的规划

最重要的话 2021年&#xff0c;真希望行业能春暖花开。 去年由于疫情的影响&#xff0c;无数行业都受到了影响&#xff0c;互联网寒冬下&#xff0c;许多程序员被裁&#xff0c;大环境格外困难。 我被公司裁掉后&#xff0c;便着急地开始找工作&#xff0c;一次次地碰壁&#…

爬虫学习笔记-requests爬取王者荣耀皮肤图片

1.导入所需的包 import requests from lxml import etree import os from time import sleep 2.定义请求头 headers {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36} 3.发送请求 # hero…

数据结构->链表分类与oj(题),带你提升代码好感

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;橘橙黄又青-CSDN博客 1.&#x1f34e;链表的分类 前面我们学过顺序表&#xff0c;顺序表问题&#xff1a; …

基于springboot实现的幼儿园管理系统

一、系统架构 前端&#xff1a;html | layui | jquery | css 后端&#xff1a;springboot | mybatis 环境&#xff1a;jdk1.8 | mysql | maven 二、代码及数据库 三、功能介绍 01. 登录页 02. 系统管理-用户管理 03. 系统管理-页面管理 04. 系统管理-角色管…