详解洛谷P2912 [USACO08OCT] Pasture Walking G(牧场行走)(lca模板题)

news/2025/4/2 5:40:03/

题目

 思路

一道模板题,没啥好说的,直接见代码

代码

#include <bits/stdc++.h>
using namespace std;
int n,q,a,to[100001][22],b,deep[100001],c,t[1000001];
struct ff
{int id,len;
};
vector<ff> vec[100001];
void dfs(int x,int fa,int dp,int now)//now是x的深度(不计边权,根的深度计为1) dp是x距离根节点的距离(计边权)
{deep[x] = now;//单独开now变量是因为边权并不影响lca的值t[x] = dp;to[x][0] = fa;for(int i = 0;i < vec[x].size();i++)if(vec[x][i].id != fa)dfs(vec[x][i].id,x,dp + vec[x][i].len,now + 1);
}
int lca(int x,int y)
{if(deep[x] < deep[y]) swap(x,y);for(int i = 21;i >= 0;i--)if(deep[to[x][i]] >= deep[y])x = to[x][i];if(x == y) return x;for(int i = 21;i >= 0;i--)if(to[x][i] != to[y][i]){x = to[x][i];y = to[y][i];}return to[x][0];
}
int main()
{cin>>n>>q;for(int i = 1;i < n;i++){scanf("%d%d%d",&a,&b,&c);vec[a].push_back({b,c});vec[b].push_back({a,c});}dfs(1,0,0,1);for(int i = 1;i <= 21;i++)for(int j = 1;j <= n;j++)to[j][i] = to[to[j][i - 1]][i - 1]; while(q--){scanf("%d%d",&a,&b);int k = lca(a,b);printf("%d\n",t[a] + t[b] - 2 * t[k]);//a的深度-lca(a,b)的深度就是a到lca(a,b)的距离,b的深度-lca(a,b)的深度就是b到lca(a,b)的距离//加起来就是a到b的距离(因为a->b的路径必定会经过lca(a,b))}return 0;
}

结语

如果这篇文章对您要帮助的话,请点赞支持一下吖! <(^-^)>


http://www.ppmy.cn/news/1346796.html

相关文章

WordPress Plugin HTML5 Video Player SQL注入漏洞复现(CVE-2024-1061)

0x01 产品简介 WordPress和WordPress plugin都是WordPress基金会的产品。WordPress是一套使用PHP语言开发的博客平台。该平台支持在PHP和MySQL的服务器上架设个人博客网站。WordPress plugin是一个应用插件。 0x02 漏洞概述 WordPress Plugin HTML5 Video Player 插件 get_v…

golang并发安全-sync.Once

什么是sync.Once sync.Once 是 Go 语言中的一种同步原语&#xff0c;用于确保某个操作或函数在并发环境下只被执行一次。它只有一个导出的方法&#xff0c;即 Do&#xff0c;该方法接收一个函数参数。在 Do 方法被调用后&#xff0c;该函数将被执行&#xff0c;而且只会执行一…

华为配置内部人员接入WLAN网络示例(802.1X认证)

配置内部人员接入WLAN网络示例&#xff08;802.1X认证&#xff09; 组网图形 图1 配置802.1X认证组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 用户接入WLAN网络&#xff0c;使用802.1X客户端进行认证&#xff0c;输入正确的用户名和密…

vue3集成bpmn

文章目录 前言一、依赖二、汉化配置1.引入文件2.样式文件 总结 前言 vue3 集成bpmn 配置工作流 一、依赖 "bpmn-js": "^7.3.1", "bpmn-js-properties-panel": "^0.37.2", "bpmn-moddle": "^6.0.0", "camu…

EmoLLM-心理健康大模型

宣传一下自己最近参与的开源 https://github.com/aJupyter/EmoLLM EmoLLM-心理健康大模型 EmoLLM 探索本项目的文档 查看Demo 报告Bug 提出新特性 EmoLLM 是一个能够支持 理解用户-支持用户-帮助用户 心理健康辅导链路的心理健康大模型&#xff0c;由 InternLM2 指令微…

c#通过ExpressionTree 表达式树实现对象关系映射

//反射expression实现对象自动映射 void Main() {Person p1new(){Id1,Name"abc"};var persondto p1.MapTo<Person, PersonDto>();Console.WriteLine($"id:{persondto.Id}-name:{persondto.Name}"); }public static class AutoMapperExs { public s…

SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式 基础(持续更新~)

具体操作&#xff1a; day2: 作用&#xff1a; 出现跨域问题 配相对应进行配置即可解决&#xff1a; IDEA连接的&#xff0c;在url最后加参数?useSSLfalse注意链接密码是123&#xff08;docker中mysql密码&#xff09; 注意&#xff0c;虚拟机中设置的密码和ip要和主机上…

Spring是怎么解决循环依赖的

首先先解释一下什么叫循环依赖 循环依赖:循环依赖其实就是循环引用,也就是两个或两个以上的bean互相持有对方,最终形成闭环.比如A依赖于B,B依赖于A 循环依赖在spring中是允许存在的,spring框架依据三级缓存已经解决了大部分的循环依赖 一级缓存:单例池,缓存已经经历了完整的…