【景区导游——LCA】

server/2025/2/5 2:09:16/

题目

代码

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5 + 10;
const int M = 2 * N;
int p[N][18], d[N], a[N];
ll dis[N][18]; //注意这里要开long long
int h[N], e[M], ne[M], idx, w[M];
int n, k;
void add(int a, int b, int c)
{e[idx] = b, ne[idx] = h[a], h[a] = idx, w[idx++] = c;
}
void dfs(int u)
{for (int i = h[u]; ~i; i = ne[i]){int j = e[i];if (d[j])continue;d[j] = d[u] + 1;p[j][0] = u;dis[j][0] = w[i];for (int k = 1; k <= 17; k++){p[j][k] = p[p[j][k - 1]][k - 1];dis[j][k] = dis[j][k - 1] + dis[p[j][k - 1]][k - 1];}dfs(j);}
}
ll lca(int a, int b)
{ll retv = 0;if (d[a] < d[b])swap(a, b);for (int i = 17; i >= 0; i--){if (d[p[a][i]] >= d[b]){retv += dis[a][i];a = p[a][i];}}if (a == b)return retv;for (int i = 17; i >= 0; i--){if (p[a][i] != p[b][i]){retv += dis[a][i];retv += dis[b][i];a = p[a][i];b = p[b][i];}}retv += dis[a][0];retv += dis[b][0];return retv;
}
int main()
{memset(h, -1, sizeof h);cin >> n >> k;for (int i = 1; i < n; i++){int a, b, c;cin >> a >> b >> c;add(a, b, c);add(b, a, c);}d[1] = 1;dfs(1);ll tmp = 0;cin >> a[1];for (int i = 2; i <= k; i++){cin >> a[i];tmp += lca(a[i - 1], a[i]);}for (int i = 1; i <= k; i++){ll ans = tmp;if (i == 1)ans -= lca(a[1], a[1 + 1]);else if (i == k)ans -= lca(a[k - 1], a[k]);else{ans -= lca(a[i - 1], a[i]);ans -= lca(a[i], a[i + 1]);ans += lca(a[i - 1], a[i + 1]);}cout << ans << ' ';}return 0;
}


http://www.ppmy.cn/server/165045.html

相关文章

list容器(详解)

list的介绍及使用&#xff08;了解&#xff0c;后边细讲&#xff09; 1.1 list的介绍&#xff08;双向循环链表&#xff09; https://cplusplus.com/reference/list/list/?kwlist&#xff08;list文档介绍&#xff09; 1. list是可以在常数范围内在任意位置进行插入和删除的序…

大数据数仓实战项目(离线数仓+实时数仓)2

1.课程目标和课程内容介绍 2.数仓维度建模设计 3.数仓为什么要分层 4.数仓分层思想和作用 下面是阿里的一种分层方式 5.数仓中表的种类和同步策略 6.数仓中表字段介绍以及表关系梳理 订单表itcast_orders 订单明细表 itcast_order_goods 商品信息表 itcast_goods 店铺表 itcast…

【Deep Seek本地化部署】模型实测:规划求解python代码

目录 前言 一、实测 1、整数规划问题 2、非线性规划问题 二、代码正确性验证 1、整数规划问题代码验证 2、非线性规划问题代码验证 三、结果正确性验证 1、整数规划问题结果正确性验证 2、非线性规划问题正确性验证 四、整数规划问题示例 后记 前言 模型&#xff…

fpga系列 HDL:XILINX Vivado Vitis 高层次综合(HLS) 实现 EBAZ板LED控制(上)

目录 创建工程创建源文件并编写C代码C仿真综合仿真导出RTL CG导出RTL错误处理&#xff1a; 创建工程 创建源文件并编写C代码 创建源文件(Souces下的hlsv.h和hlsv.cpp&#xff0c;Test Bench下的test_hlsv1.cpp)&#xff1a; hlsv1.h #ifndef HLSV1 #define HLSV1 #include &l…

Deep Sleep 96小时:一场没有硝烟的科技保卫战

2025年1月28日凌晨3点&#xff0c;当大多数人还沉浸在梦乡时&#xff0c;一场没有硝烟的战争悄然打响。代号“Deep Sleep”的服务器突遭海量数据洪流冲击&#xff0c;警报声响彻机房&#xff0c;一场针对中国关键信息基础设施的网络攻击来势汹汹&#xff01; 面对美国发起的这场…

http和https的区别?

文章目录 一、安全性二、连接方式三、端口使用四、证书申请五、优缺点六、SSL&TLS协议6.1、SSL协议6.2、TLS协议6.3、SSL/TLS协议在HTTPS中的应用 总结 HTTP和HTTPS是两种常见的网络传输协议&#xff0c;它们在安全性、连接方式、端口使用以及证书申请等方面存在显著差异。…

240. 搜索二维矩阵||

参考题解&#xff1a;https://leetcode.cn/problems/search-a-2d-matrix-ii/solutions/2361487/240-sou-suo-er-wei-ju-zhen-iitan-xin-qin-7mtf 将矩阵旋转45度&#xff0c;可以看作一个二叉搜索树。 假设以左下角元素为根结点&#xff0c; 当target比root大的时候&#xff…

MVC 文件夹:架构之美与实际应用

MVC 文件夹:架构之美与实际应用 引言 MVC(Model-View-Controller)是一种设计模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种架构模式不仅提高了代码的可维护性和可扩展性,而且使得开发流程更加清晰。本文将深入探讨MVC文…