牛客小白月赛102:最短?路径(分层bfs)

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

给定一个 nnn 个点 mmm 条边的无向图,LH 打算从点 111 出发去点 nnn。

假如 LH 到达了一个点 iii,那么他可以选择在这个点花费 aia_iai​ 的时间休息后继续赶路,或者不休息然后花费 111 的时间简单整顿后继续赶路。
 

LH 不能连续超过 kkk 个节点不休息,问从 111 到 nnn 的最短时间。

注意:假如 LH 到达了点 nnn 也需要选择休息或者不休息。

输入描述:

第一行输入一个整数 T(1≤T≤104)T(1\le T\le 10^4)T(1≤T≤104),表示测试用例组数。接下来是 TTT 个测试用例。

每个测试用例第一行包含三个整数 n,m,k(2≤n≤2×105,1≤m≤3×105,0≤k≤10)n,m,k(2\le n\le 2\times 10^5,1\le m\le 3\times 10^5,0\le k\le 10)n,m,k(2≤n≤2×105,1≤m≤3×105,0≤k≤10)。 

第二行输入 nnn 个整数 ai(0≤ai≤109)a_i(0\le a_i\le 10^9)ai​(0≤ai​≤109),表示在第 iii 个点休息需要花费的时间。

随后 mmm 行每行两个整数 u,vu ,vu,v,表示 uuu 和 vvv 之间有一条无向边。

保证输入的图联通,没有重边和自环。

保证所有测试用例 nnn 的和不超过 2×1052\times 10^52×105,mmm 的和不超过 3×1053\times 10^53×105。

输出描述:

对于每个测试用例,输出一个整数,表示 LH 从 111 到 nnn 的最短时间。

示例1

输入

复制1 5 6 2 7 7 3 6 4 4 5 1 3 3 4 5 2 2 4 1 4

1
5 6 2
7 7 3 6 4
4 5
1 3
3 4
5 2
2 4
1 4

输出

复制6

6

说明

一种可能的最优方案为 1−>4−>51->4->51−>4−>5。

其中点 111 和点 444 不休息,在点 555 休息,总时间为 1+1+a5=61+1+a_5=61+1+a5​=6。

示例2

输入

复制2 20 30 8 9 10 2 8 1 6 7 10 6 10 7 0 0 3 4 0 7 9 4 3 18 4 8 10 17 6 11 3 7 4 7 14 3 8 10 19 16 8 11 4 13 14 17 14 4 15 12 5 12 17 16 9 5 20 7 2 1 4 10 5 14 15 3 5 17 8 16 6 9 10 16 17 4 2 17 20 10 7 16 1 20 30 3 2 0 2 2 9 6 7 2 5 3 7 1 8 8 8 3 1 0 8 9 1 17 11 8 17 16 14 19 7 6 3 4 10 15 4 9 14 18 20 5 7 8 18 10 3 6 7 1 5 14 13 5 14 3 15 2 12 13 7 3 6 18 2 10 9 3 1 14 11 4 3 17 14 10 7 14 13 8 6 5

2
20 30 8
9 10 2 8 1 6 7 10 6 10 7 0 0 3 4 0 7 9 4 3
18 4
8 10
17 6
11 3
7 4
7 14
3 8
10 19
16 8
11 4
13 14
17 14
4 15
12 5
12 17
16 9
5 20
7 2
1 4
10 5
14 15
3 5
17 8
16 6
9 10
16 17
4 2
17 20
10 7
16 1
20 30 3
2 0 2 2 9 6 7 2 5 3 7 1 8 8 8 3 1 0 8 9
1 17
11 8
17 16
14 19
7 6
3 4
10 15
4 9
14 18
20 5
7 8
18 10
3 6
7 1
5 14
13 5
14 3
15 2
12 13
7 3
6 18
2 10
9 3
1 14
11 4
3 17
14 10
7 14
13 8
6 5

输出

复制3 5

3
5
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+10;
int n,m,k,a[N];
int vis[N][20],dis[N][20];
struct ty{
    int dis,x,k;
    bool operator < (const ty &a) const{
        return dis>a.dis;
    }
};
void solved(){
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++){
        for(int j=0;j<=k;j++){
            vis[i][j]=0;
            dis[i][j]=0x3f3f3f3f3f3f3f3f;
        }
    }
    vector<int> g[n+1];
    for(int i=1;i<=m;i++){
        int u,v;
        cin>>u>>v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    priority_queue<ty> q;
    q.push({a[1],1,0});//休息
    dis[1][0]=a[1];
    if(k!=0){
        q.push({1,1,1});
        dis[1][1]=1;
    }
    
    while(q.size()){
        ty tmp=q.top();
        q.pop();
        if(vis[tmp.x][tmp.k]) continue;
        vis[tmp.x][tmp.k]=1;
        for(auto x:g[tmp.x]){
            
            if(tmp.k==k){
                if(dis[x][0]>dis[tmp.x][tmp.k]+a[x]){//休息
                    dis[x][0]=dis[tmp.x][tmp.k]+a[x];
                    q.push({dis[x][0],x,0});
                }
                continue;
            }
            
            if(dis[x][0]>dis[tmp.x][tmp.k]+a[x]){//休息
                dis[x][0]=dis[tmp.x][tmp.k]+a[x];
                q.push({dis[x][0],x,0});
            }
            
            if(dis[x][tmp.k+1]>dis[tmp.x][tmp.k]+1){
                dis[x][tmp.k+1]=dis[tmp.x][tmp.k]+1;
                q.push({dis[x][tmp.k+1],x,tmp.k+1});
            }
        }
    }
    
    int ans=0x3f3f3f3f3f3f3f3f;
    for(int i=0;i<=k;i++){
        ans=min(ans,dis[n][i]);
    }
    cout<<ans<<endl;
    
}
signed main(){
    cin.tie(0);
    ios::sync_with_stdio(0);
    int t;
    cin>>t;
    while(t--){
        solved();
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTTP vs WebSocket

本文将对比介绍HTTP 和 WebSocket &#xff01; 相关文章&#xff1a; 1.HTTP 详解 2.WebSocket 详解 一、HTTP&#xff1a;请求/响应的主流协议 HTTP&#xff08;超文本传输协议&#xff09;是用于发送和接收网页数据的标准协议。它最早于1991年由Tim Berners-Lee提出来&…

如何查看GB28181流媒体平台LiveGBS中对GB28181实时视频数据统计的负载信息

目录 1、负载信息2、负载信息说明3、会话列表查看 3.1、会话列表4、停止会话5、搭建GB28181视频直播平台 1、负载信息 实时展示直播、回放、播放、录像、H265、级联等使用数目 2、负载信息说明 直播&#xff1a;当前推流到平台的实时视频数目回放&#xff1a;当前推流到平台的回…

OpenAI Canvas最新发布,编程和写作迎来全新史诗级加强!

文章目录 零、前言一、GPT-40 with canvas操作指导写作领域加强建议编辑调整长度阅读水平添加最后的润色添加表情 编程领域加强选中代码问问题添加评论&#xff08;添加注释&#xff09;添加日志转换语言代码审查 二、感受 零、前言 最新消息&#xff0c;国庆期间OpenAI有大动…

解放双手-Mac电脑自定义文件默认打开方式的最有效方法

你们使用Mac的过程中&#xff0c;文件格式是不是每次都要自己选择打开方式&#xff0c;文件类型太多了&#xff0c;默认打开方式没办法兼顾所有的文件类型&#xff0c;这样太麻烦了&#xff0c;如果收到了新文件类型的文件&#xff0c;每次都要弹窗选择打开方式会不会心累 试试…

QT工程概述

在Qt中&#xff0c;创建 "MainWindow" 与 "Widget" 项目的主要区别在于他们的用途和功能范围&#xff1a; MainWindow&#xff1a;这是一个包含完整菜单栏、工具栏和状态栏的主窗口应用程序框架。它适合于更复 杂的应用程序&#xff0c;需要这些额外的用户…

git删除错误的commit

文章目录 1、git删除错误的commit2、.gitignore配置文件不生效的问题 1、git删除错误的commit git的流程如图&#xff1a; 当某次失误造成commit的版本有问题&#xff0c;需要回退到正常的版本修改后重新add。 首先通过git log查看commit提交记录&#xff0c;可以看到HEAD-…

使用Pytorch写简单线性回归

文章目录 Pytorch一、Pytorch 介绍二、概念三、应用于简单线性回归 1.代码框架2.引用3.继续模型(1)要定义一个模型&#xff0c;需要继承nn.Module&#xff1a;(2)如果函数的参数不具体指定&#xff0c;那么就需要在__init__函数中添加未指定的变量&#xff1a; 2.定义数据3.实例…

Redis哨兵模式部署(超详细)

哨兵模式特点 主从模式的弊端就是不具备高可用性&#xff0c;当master挂掉以后&#xff0c;Redis将不能再对外提供写入操作&#xff0c;因此sentinel模式应运而生。sentinel中文含义为哨兵&#xff0c;顾名思义&#xff0c;它的作用就是监控redis集群的运行状况&#xff0c;此…

如何利用phpstudy创建mysql数据库

phpStudy诞生于2007年&#xff0c;是一款老牌知名的PHP开发集成环境工具&#xff0c;产品历经多次迭代升级&#xff0c;目前有phpStudy经典版、phpStudy V8&#xff08;2019版&#xff09;等等&#xff0c;利用phpstudy可以快速搭建一个mysql环境&#xff0c;接下来我们就开始吧…

Unity MVC框架1-2 实战分析

该课程资源来源于唐老狮&#xff0c;吃水不忘打井人&#xff0c;不胜感激 Unity MVC框架演示 1-1 理论分析-CSDN博客 首先你需要知道什么mvc框架&#xff0c;并且对三个层级有个比较清晰的认识&#xff0c;当然不清楚也好&#xff0c;下面例子中将会十分细心地让你理解&#x…

SpringBoot在高校竞赛平台开发中的优化策略

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理高校学科竞赛平台的相关信息成为必然。开发…

TensorFlow详细配置

Anaconda 的安装路径配置系统环境变量 1 windows path配置 2 conda info C:\Users\Administrator>conda info active environment : None user config file : C:\Users\Administrator\.condarc populated config files : C:\Users\Administrator\.condarc …

Vue3中常用的八种组件通信方式

一、props父组件向子组件通信 父组件&#xff1a; props用于父组件向子组件传递数据&#xff0c;子组件用defineprops接收父组件传来的参数 在父组件中使用子组件时&#xff0c;给子组件以添加属性的方式传值 <sonCom car"宝马车"></sonCom> 其中如…

如何在 Jupyter Notebook 执行和学习 SQL 语句(上)—— 基本原理详解和相关库安装篇

近期我找工作很多岗位问到sql&#xff0c;由于我简历上有写&#xff0c;加上我实习的时候确实运用了&#xff0c;所以我还是准备复习一下SQL语句&#xff0c;常见的内容&#xff0c;主要包括一些内容&#xff0c;比如SQL基础&#xff08;主要是取数select&#xff0c;毕竟用的时…

electron-vite打包踩坑记录

electron-vite打包踩坑记录 大前端已成趋势&#xff0c;用electron开发桌面端应用越来越普遍 近期尝试用electronvite开发了个桌面应用&#xff0c;electron-vite地址&#xff0c;可用使用vue开发&#xff0c;vite打包&#xff0c;这样就很方便了 但是&#xff0c;我尝试了一…

Java项目实战II基于Java+Spring Boot+MySQL的桂林旅游景点导游平台(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 桂林&#xff0c;以其独特的喀斯特地貌、秀美的自然风光闻名遐迩&#xff0c;每年吸引着无数国内外游…

N1从安卓盒子刷成armbian

Release Armbian_noble_save_2024.10 ophub/amlogic-s9xxx-armbian (github.com) armbian下载&#xff0c;这里要选择905d adb 下载地址 https://dl.google.com/android/repository/platform-tools-latest-windows.zip 提示信息 恩山无线论坛 使用usb image tool restet a…

月饼市场新风潮:解析茶味的消费趋势

茶味月饼评论分析 一、评论的基本统计分析(数据来源&#xff1a;淘宝评论信息接口) 评论长度分布图&#xff1a; 根据接口拉取数据获得的评论数据&#xff0c;并进行数据清洗后&#xff0c;得到的评论如下&#xff1a; 评论总数: 9**3 评论长度描述性统计&#xff1a; Cou…

【GT240X】【3】Wmware17和Centos 8 安装

文章目录 一、说明二、安装WMware2.1 下载WMware2.2 安装2.3 虚拟机的逻辑结构 三、安装Centos3.1 获取最新版本Centos3.2 创建虚拟机 四、问题和简答4.1 centos被淘汰了吗&#xff1f;4.2 centos里面中文显示成小方块的解决方法4.3 汉语-英语输入切换4.4 全屏和半屏切换 五、练…

【unity框架开发12】从零手搓unity存档存储数据持久化系统,实现对存档的创建,获取,保存,加载,删除,缓存,加密,支持多存档

文章目录 前言一、Unity对Json数据的操作方法一、JsonUtility方法二、Newtonsoft 二、持久化的数据路径三、数据加密/解密加密方法解密方法 四、条件编译指令限制仅在编辑器模式下进行加密/解密四、数据持久化管理器1、存档工具类2、一个存档数据3、存档系统数据类4、数据存档存…