蓝桥杯-景区导游-DFS

某景区一共有 N 个景点,编号 1 到 N。景点之间共有 N − 1 条双向的摆渡车线路相连,形成一棵树状结构。在景点之间往返只能通过这些摆渡车进行,需要花费一定的时间。

小明是这个景区的资深导游,他每天都要按固定顺序带客人游览其中 K 个景点:A1, A2, . . . , AK。今天由于时间原因,小明决定跳过其中一个景点,只带游客按顺序游览其中 K − 1 个景点。具体来说,如果小明选择跳过 Ai,那么他会按顺序带游客游览 A1, A2, . . . , Ai−1, Ai+1, . . . , AK, (1 ≤ i ≤ K)。

请你对任意一个 Ai,计算如果跳过这个景点,小明需要花费多少时间在景点之间的摆渡车上?

输入格式

第一行包含 2 个整数 N 和 K。

以下 N − 1 行,每行包含 3 个整数 u, v 和 t,代表景点 u 和 v 之间有摆渡车线路,花费 t 个单位时间。

最后一行包含 K 个整数 A1, A2, . . . , AK 代表原定游览线路。

输出格式

输出 K 个整数,其中第 i 个代表跳过 Ai 之后,花费在摆渡车上的时间。

样例输入

复制

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

样例输出

复制

10 7 13 14

提示

原路线是 2 → 6 → 5 → 1。

当跳过 2 时,路线是 6 → 5 → 1,其中 6 → 5 花费时间 3 + 2 + 2 = 7,5 → 1 花费时间 2 + 1 = 3,总时间花费 10。

当跳过 6 时,路线是 2 → 5 → 1,其中 2 → 5 花费时间 1 + 1 + 2 = 4,5 → 1 花费时间 2 + 1 = 3,总时间花费 7。

当跳过 5 时,路线是 2 → 6 → 1,其中 2 → 6 花费时间 1 + 1 + 2 + 3 = 7,6 → 1 花费时间 3 + 2 + 1 = 6,总时间花费 13。

当跳过 1 时,路线时 2 → 6 → 5,其中 2 → 6 花费时间 1 + 1 + 2 + 3 = 7,6 → 5 花费时间 3 + 2 + 2 = 7,总时间花费 14。

对于 20% 的数据,2 ≤ K ≤ N ≤ 102。

对于 40% 的数据,2 ≤ K ≤ N ≤ 104。

对于 100% 的数据,2 ≤ K ≤ N ≤ 105,1 ≤ u, v, Ai ≤ N,1 ≤ t ≤ 105。保证Ai 两两不同。

#include <iostream>
#include<map>
#include<vector>
using namespace std;
#define INF 0x3f3f3f
#define int long long
#define deb(x)cout<<#x<<"="<<x<<'/n'
const int N = 2e5 + 10;
typedef pair<int, int>pii;
map<pii, int>st;               //key是起点和终点,value是距离
int a[N];                      //节点的顺序,即要游览的景点顺序vector<pii>e[N];            //key是当前节点,value是终点和距离bool dfs(int s,int u,int v,int father,int sum)
{if (u == v){st[{v, s}]=st[{s, v}] = sum;return true;}for (int i = 0; i < e[u].size(); i++) //循环找到当前节点的没有经过的节点{int son = e[u][i].first;if ( son== father) continue;sum += e[u][i].second;if(dfs(s, son, v, u, sum))return true;}return false;
}void solve()
{int n, k;cin >> n >> k;for (int i = 0; i < n-1; i++){int x, y, t;cin >> x >> y >> t;e[x].push_back({ y,t });                    //输入一个游览图e[y].push_back({ x,t });}for (int i = 0; i < k; i++){cin >> a[i];             //输入k个要又游览的景点}int ans = 0;                 //计算需要游览的景点的距离for (int i = 0; i < k; i++){dfs(a[i], a[i], a[i + 1], -1, 0);ans += st[{a[i], a[i + 1]}];}for (int i = 0; i < k; i++){int temp;if (i == 0){temp = ans - st[{a[i], a[i + 1]}];}else if (i == k - 1){temp = ans - st[{a[i-1], a[i]}];}else{		dfs(a[i - 1], a[i - 1], a[i + 1], -1, 0);temp = ans - st[{a[i], a[i + 1]}] - st[{a[i - 1], a[i]}] + st[{a[i - 1], a[i + 1]}];}cout << temp << endl;}
}
signed main()
{ios::sync_with_stdio;cin.tie(0);cout.tie(0);int num = 1;while (num--){solve();}
}

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

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

相关文章

【华为OD机试】 最小矩阵宽度【2024 C卷|100分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 给定一个矩阵,包含 N * M 个整数,和一个包含 K 个整数的数组。 现在要求在这个矩阵中找一个宽度最小的子矩阵,要求子矩阵包含数组中所有的整数。 输入描述 第一行输入两个正整数 N,M,…

【自然语言处理】P2 PyTorch 基础 - 张量

目录 安装 PyTorch张量创建张量操作张量索引、切片、联合操作 CUDA张量 本系列博文我们将使用 PyTorch 来实现深度学习模型等。PyTorch 是一个开源的、社区驱动的深度学习框架。拥有强大的工具和库生态系统&#xff0c;包含 TorchVision&#xff08;用于图像处理&#xff09;、…

面试经典150题 -- 哈希表(总结)

总的链接 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 383 . 赎金信 用哈希表模拟 ; 用两个长为26的整数数组模拟哈希表&#xff0c;分别统计r和m中的频次&#xff0c;如果在m中字符出现的都比r中的小&#xff0c;那么m一…

日志记录——单片机可执行文件合并

一&#xff1a;需求场景 现在有一片单片机&#xff0c;执行程序包括自定义boot和应用程序app, 在将打包好的固件给到生产是有以下问题&#xff0c;由于要通过jlink烧录boot&#xff0c;然后上电启动boot&#xff0c;通过boot烧录初始化程序&#xff0c;过程过于复杂&#xff0…

对于vue中<template #default=“{row}“> 的解释

<template #default"{row}"> 是一个在 Vue.js 的模板中使用的语法&#xff0c;特别是在 Vue 的表格组件&#xff08;如 Element UI 的 el-table&#xff09;中。 这个语法是用于定义如何渲染表格的每一行数据。 这里的 #default 是一个具名插槽&#xff08;nam…

Web实战丨基于django+hitcount的网页计数器

文章目录 写在前面Django简介主要程序运行结果系列文章写在后面 写在前面 本期内容 基于djangohitcount的网页计数器 所需环境 pythonpycharm或vscodedjango 下载地址 https://download.csdn.net/download/m0_68111267/88795611 Django简介 Django 是一个开源的、基于 …

OR-Tools的CP-SAT求解器常用参数设置与说明

在OR-Tools当中,可以对模型及求解器的常用参数进行设置。这里我们介绍CP-SAT求解器的参数设置,参数设置放在求解对象创建后,如下: solver = cp_model.CpSolver() solver.parameters.max_time_in_seconds = 10 solver.parameters.absolute_gap_limit = 0.05 ...在 solver.p…

消息总线在微服务中的应用

直连式配置中心 上一篇文章介绍了 Spring Cloud 中的分布式配置组件 Config&#xff0c;每个服务节点可以从Config Server 拉取外部配置信息。但是似乎还有一个悬而未决的问题&#xff0c;那就是当服务节点数量非常庞大的时候&#xff0c;我们不可能一台一台服务器挨个去手工触…

Linux系统编程:进程

目录 相关指令 ps指令 top指令 相关函数及其示例 getpid() getpid()示例&#xff1a; fork() 示例&#xff1a; 示例2&#xff1a;fork()返回值 Fathers pid is 14532.This is FartherProcess, pid is 14532.This is SonProcess, pid is 14533. vfork() 示例&am…

Java Socket Server TCP服务端向指定客户端发送消息

实现思路 首先需要知道java里如何创建一个Socket服务器端。 //创建一个服务器端对象ServerSocket server new ServerSocket(); //绑定启动的ip和端口号server.bind(new InetSocketAddress("127.0.0.1",8082));//启动成功后&#xff0c;调用accept()方法阻塞&#xf…

RabbitMQ下载与安装

一、Docker安装 1.单机部署 我们在Centos7虚拟机中使用Docker来安装。 1.1.下载镜像 方式一&#xff1a;在线拉取 docker pull rabbitmq:3-management方式二&#xff1a;从本地加载 上传到虚拟机中后&#xff0c;使用命令加载镜像即可&#xff1a; docker load -i mq.ta…

Docker上安装配置tomcat

目录 1. 拉取镜像 2. 创建运行镜像 3. 查看是否创建成功 ps&#xff1a;如果出现404错误 tomcat目录结构 1. 拉取镜像 这里使用 tomcat:8.5.40 版本作为安装 docker pull tomcat:8.5.40 2. 创建运行镜像 docker run -d --name tomcat -p 8080:8080 \--privilegedtrue …

改进的 K-Means 聚类方法介绍

引言 数据科学的一个中心假设是&#xff0c;紧密度表明相关性。彼此“接近”的数据点是相似的。如果将年龄、头发数量和体重绘制在空间中&#xff0c;很可能许多人会聚集在一起。这就是 k 均值聚类背后的直觉。 我们随机生成 K 个质心&#xff0c;每个簇一个&#xff0c;并将…

webstorm、vscode、HBuilder配置eslint检查

你们好&#xff0c;我是金金金。 场景 每个人写的代码都有自己所属的风格&#xff0c;所以项目中统一代码风格特别重要&#xff0c;新开的项目中如何快速配置ESLint呢&#xff1f; 安装 npm install --save-dev eslint ----安装eslintnpm install --save-dev eslint-plugin-vu…

事件分发机制:从OnTouchListener开始,按钮变色的Demo

要彻底弄清楚事件分发机制&#xff0c;先要明白OnTouchListener的作用。 我们看下Android 1.6上&#xff0c;OnTouchListener的代码定义&#xff0c;源码在线地址&#xff1a;Android 1.6 sdk4 View.java 可以看到&#xff0c;OnTouchListener就是View类中的一个public接口&am…

django+flask警务案件信息管理系统python-5dg53-vue

1&#xff09;用户在后台页面各种操作可及时得到反馈。 &#xff08;2&#xff09;该平台是提供给多个用户使用的平台&#xff0c;警员使用之前需要注册登录。登录验证后&#xff0c;警员才可进行各种操作[10]。 &#xff08;3&#xff09;管理员用户拥有信息新增&#xff0c;修…

Git 实战场景过程(工作总结篇)

目录 前言1. Git远程仓库建立分支&#xff0c;本地未显示1.1 问题所示1.2 知识补充 2. Git暂存内容切换分支2.1 问题所示2.2 知识补充 3. Git放弃修改数据3.1 问题所示3.2 知识补充 4. git merge合并查看差异 前言 主要总结工作中的疑惑点&#xff0c;如果你也有相应的场景&am…

跟着cherno手搓游戏引擎【19】抽象纹理

引入&#xff1a; 导入stb_image: GitHub - nothings/stb: stb single-file public domain libraries for C/C 下载复制stb_image.h的内容&#xff08;8000多行&#xff09;&#xff0c;然后粘到如图位置 stb_image.cpp: #include"ytpch.h" #define STB_IMAGE_IM…

Android进阶之路 - 通过业务(Activity)栈管理业务流程

关于业务栈的管理方式&#xff0c;我在去年刚接触当前项目的时候就想记录一下&#xff0c;但是一直晃晃悠悠拖到了现在&#xff0c;索性在春节前以其收尾也是不错。其实这篇内容在项目中肯定经常用得到&#xff0c;但是关于标题命名我却不知道如何描述… 在实际业务中为了形成业…

leetcode-用栈实现队列

232. 用栈实现队列 前面有道题是用队列实现栈 &#xff0c;本题反过来了&#xff0c;是使用两个栈来模拟队列。 题解&#xff1a; 我们定义两个栈一个进栈in_stack&#xff0c;一个出栈out_stack&#xff0c;在push数据的时候将数据放入进栈就好&#xff0c;但在pop的时候&a…