竞赛中心 - 蓝桥云课

#include<bits/stdc++.h>
using namespace std;
#define int long long 
const int A=1e5+1;
typedef pair<int,int>p;
map<p,int>st;
vector<p>edge[A];
int a[A];
int result=0;
bool dfs(int s,int u,int father,int v,int sum)
{if(u==v){st[{s,v}]=sum;st[{v,s}]=sum;return true;}for(size_t i=0;i<edge[u].size();i++){int son=edge[u][i].first;if(son==father){continue;}if(dfs(s,son,u,v,sum+edge[u][i].second)){return true;}}return false;
}
signed main()
{// 请在此输入您的代码int N,K,u,v,t;cin>>N>>K;for(int i=0;i<N-1;i++){cin>>u>>v>>t;edge[u].push_back({v,t});edge[v].push_back({u,t});}for(int i=0;i<K;i++){cin>>a[i];}for(int i=0;i<K-1;i++){dfs(a[i],a[i],-1,a[i+1],0);result+=st[{a[i],a[i+1]}];}for(int i=0;i<K;i++){int result1=result;if(i==0){result1-=st[{a[i],a[i+1]}];}else if(i==K-1){result1-=st[{a[i-1],a[i]}];}else{result1-=st[{a[i-1],a[i]}];result1-=st[{a[i],a[i+1]}];dfs(a[i-1],a[i-1],-1,a[i+1],0);result1+=st[{a[i-1],a[i+1]}];}cout<<result1<<" ";}return 0;
}

构造邻接表,由于题意中存在边权值时间,定义邻接表为pair类型。通过typedef关键字重命名了pair类型为p。

根据题目要求暴力搜索题目要求的路线,得到原路线的时间总和。

dfs函数:

bool dfs(int s,int u,int father,int v,int sum)
{if(u==v){st[{s,v}]=sum;st[{v,s}]=sum;return true;}for(size_t i=0;i<edge[u].size();i++){int son=edge[u][i].first;if(son==father){continue;}if(dfs(s,son,u,v,sum+edge[u][i].second)){return true;}}return false;
}

s和v分别代表路线的起点和终点,u代表当前节点,father代表当前节点的父节点(为了防止走回头路),sum表示起点到当前节点的路径和。

终止条件:当当前节点到达终点,st数组存储路径和。

递归逻辑:从当前节点向后遍历,edge[u]这个邻接表存储了当前节点连接的子节点,遍历每一个子节点(注意:i的类型要为size_t,要与edge[u].size()一致)。当前节点的子节点为edge[u][i].first(表示u节点出发的第i条边,first表示节点值,second表示边权),如果发现子节点等于父节点,走回头路了,就结束这次循环,换下一个节点,如果子节点可以到达目标终点,则向上返回true,如果所有条件都没有满足,则返回false。

问题解决思路:

for(int i=0;i<K-1;i++){dfs(a[i],a[i],-1,a[i+1],0);result+=st[{a[i],a[i+1]}];}for(int i=0;i<K;i++){int result1=result;if(i==0){result1-=st[{a[i],a[i+1]}];}else if(i==K-1){result1-=st[{a[i-1],a[i]}];}else{result1-=st[{a[i-1],a[i]}];result1-=st[{a[i],a[i+1]}];dfs(a[i-1],a[i-1],-1,a[i+1],0);result1+=st[{a[i-1],a[i+1]}];}cout<<result1<<" ";}

先暴力搜索邻接表(a中存储的是节点值),得到每一步的路径值,将他们累加起来得到目标路径总和。得到最终结果分为三种情况,第一种情况为删掉的节点是第一个节点,就将第一个节点和第二个节点的路径减去就解决了。第二种情况是删掉的节点是最后一个节点,就将最后一个节点和倒数第二个节点的路径减去就解决了。第三种情况为其他,减去左右两节点的路径和后还要加上左节点到右节点的路径和,这个路径和并没有搜索过,所以要再进行一遍搜索。

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

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

相关文章

深入理解VideoToolbox:iOS/macOS视频硬编解码实战指南

引言&#xff1a;VideoToolbox框架概述 VideoToolbox是Apple提供的底层框架&#xff0c;首次在WWDC2014上推出&#xff0c;为iOS和macOS开发者提供直接访问硬件编码器和解码器的能力。作为Core Media框架的重要组成部分&#xff0c;VideoToolbox专注于视频压缩、解压缩以及Cor…

Python基础语法练习

本文涵盖了 Python 基础编程中的多个重要概念&#xff0c;从简单的输出语句到运算符、字符串操作、变量赋值等都有涉及。这些例子非常适合初学者学习和理解 Python 的基本语法。1. Hello World# 输出Hello Worldprint("Hello, World!")2. 变量赋值# 创建变量并赋值na…

关于“致命错误:‘https://github.com/....git/‘ 鉴权失败”

问题分析 错误信息&#xff1a; remote: Invalid username or token. Password authentication is not supported for Git operations. 致命错误&#xff1a;https://github.com/yarajia/LittleTestToolsProject.git/ 鉴权失败原因&#xff1a;GitHub从2021年8月13日起不再支持…

基于Flask + Vue3 的新闻数据分析平台源代码+数据库+使用说明,爬取今日头条新闻数据,采集与清洗、数据分析、建立数据模型、数据可视化

介绍 本项目为新闻数据分析平台&#xff0c;目的是爬取新闻(目前仅含爬取今日头条)数据&#xff0c;然后对数据进行展示、采集与清洗、数据分析、建立数据模型、数据可视化。本项目采用前后端分离模式&#xff0c;前端使用 Vue3 ArcoDesign 搭建&#xff0c;后端使用 Python …

LabVIEW数字抽取滤波

​基于 LabVIEW 平台设计数字抽取滤波器&#xff0c;用于动态测试领域&#xff0c;解决高采样率数据的大动态范围需求与频带划分问题。方案替换硬件为可靠性优异的品牌&#xff0c;通过虚拟仪器架构实现信号处理功能&#xff0c;为动态信号分析提供高效、可复用的设计参考。应用…

云原生时代的 Linux:容器、虚拟化与分布式的基石

&#x1f4dd;个人主页&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 在云计算与容器化快速发展的今天&#xff0c;Linux 已经不再只是服务器上的操作系统&#xff0c;而是整个云原生生态的底层基石。无论是运…

多场景两阶段分布式鲁棒优化模型、数据驱动的综合能源系统

基于数据驱动的综合能源系统多场景两阶段分布式鲁棒优化模型 鲁棒优化是应对数据不确定性的一种优化方法&#xff0c;但单阶段鲁棒优化过于保守。为了解决这一问题&#xff0c;引入了两阶段鲁棒优化(Two-stage Robust Optimization)以及更一般的多阶段鲁棒优化&#xff0c;其核…

Python实现点云PCA配准——粗配准

本节我们来介绍PCA&#xff08;主成分分析&#xff09;算法进行点云配准&#xff0c;这是一种经典的统计降维与特征提取工具&#xff0c;在三维点云处理中常被用来完成“粗配准”。其核心思想是&#xff1a;先把两个待对齐的点云各自进行主成分分解&#xff0c;获得各自的“主轴…

零基础深度学习规划路线:从数学公式到AI大模型的系统进阶指南

引言在人工智能革命席卷全球的2025年&#xff0c;深度学习已成为改变行业格局的核心技术。本规划路线整合最新教育资源与实践方法&#xff0c;为完全零基础的学习者构建一条从数学基础到AI大模型的系统学习路径。通过清华大佬的实战课程、吴恩达的经典理论、Kaggle竞赛的实战锤…

基于Vue.js和Golang构建高效在线客服系统:前端实现与后端交互详解

在当今互联网时代&#xff0c;在线客服系统已成为企业与用户沟通的重要桥梁。本文将详细介绍如何使用Vue.js作为前端框架&#xff0c;Gin作为后端框架&#xff0c;构建一个高效的在线客服系统。一、项目背景与技术选型项目背景随着电子商务的迅猛发展&#xff0c;用户对即时咨询…

虚幻GAS底层原理解剖九 (内存管理)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、整体内存管理思路概览二、核心对象的生命周期与托管逻辑UGameplayAbility 的管理GameplayEffect 的内存管理ActiveGameplayEffect 生命周期三、属性&#xf…

Rust 通用库新增 WebAssembly

1 先判断&#xff1a;也许你的 crate 已经能跑 Wasm&#xff01;排查阻碍因素 直接文件/网络 I/O块式&#xff08;同步&#xff09;I/Ostd::thread 线程创建并不受支持的 C 系统库绑定快速验证rustup target add wasm32-unknown-unknown cargo build --target wasm32-unknown-…

java分布式定时任务

一、分布式锁的底层实现细节&#xff08;以 Redis 为例&#xff09;分布式锁是解决任务重复执行的核心&#xff0c;需保证原子性、超时释放和可重入性。以下是生产级 Redis 锁实现&#xff1a;public class RedisDistributedLock {private final RedisTemplate<String, Stri…

Kafka 的基本操作(1)

Kafka 是一个分布式流处理平台&#xff0c;核心功能是高吞吐量的消息发布与订阅。以下是 Kafka 最常用的基本操作&#xff0c;涵盖环境启动、主题管理、消息生产与消费等核心场景&#xff08;基于 Kafka 2.x 版本&#xff0c;使用命令行工具&#xff09;。 一、环境准备与启动 …

React 为什么要自定义 Hooks?

历史相关文章2024年&#xff1a; React 为什么引入 Hooks &#xff1f; React 中&#xff0c;Hook 是一个特定的概念 自定义 Hook&#xff08;Custom Hook&#xff09;在 React 中相当于&#xff1a; ✅ 一个可以复用的逻辑片段&#xff0c;封装了多个内置 Hooks 的组合和行为 …

[激光原理与应用-181]:测量仪器 - 频谱型 - 干涉仪,OCT(光学相干断层扫描技术)

OCT&#xff08;光学相干断层扫描技术&#xff09;的核心工作原理基于低相干光干涉&#xff0c;通过测量生物组织或材料内部不同深度结构的背向散射光信号差异&#xff0c;构建高分辨率的二维或三维图像。以下是其工作原理的详细解析&#xff1a;一、基础原理&#xff1a;低相干…

python学智能算法(三十五)|SVM-软边界拉格朗日方程乘子非负性理解

【1】引言 前序学习进程中&#xff0c;已经学习了构建SVM软边界拉格朗日方程&#xff0c;具体方程形式为&#xff1a; L(w,b,ξ,α,μ)12∣∣w∣∣2C∑i1nξi−∑i1nαi[yi(w⋅xib)−1ξi]−∑i1nμiξiL(w,b,\xi,\alpha,\mu)\frac{1}{2}||w||^2C\sum_{i1}^{n}\xi_{i}-\sum_{i…

LeetCode 刷题【34. 在排序数组中查找元素的第一个和最后一个位置、35. 搜索插入位置】

34. 在排序数组中查找元素的第一个和最后一个位置 自己做 解&#xff1a;二分查找 class Solution { public://二分查找int halfFind(vector<int> nums, int begin, int end, int target){if(begin > end) //找不到的情况return -1;int mid (begin end) / …

Vue3 计算属性与监听器

文章目录计算属性配置项 computedHTML 结构Vue 实例数据方法计算属性绑定数据和方法完整代码vue3商品加减案例监听器配置项 watch简单类型写法深度监听写法计算属性配置项 computed 使用 Vue 实现一个商品价格计算器&#xff0c;设置一个初始单价&#xff0c;初始数量为 1&…

Mysql如何迁移数据库数据

文章目录一、使用 mysqldump 工具&#xff08;最常用&#xff09;&#xff08;一&#xff09;导出数据&#xff08;二&#xff09;导出数据库&#xff08;不含数据&#xff09;&#xff08;三&#xff09;导出指定表&#xff08;四&#xff09;导入数据二、直接拷贝文件三、使用…