当前位置: 首页 > news >正文

P10289 [GESP样题 八级] 小杨的旅游

Description

给定一棵 n n n 个点的树,每条边权值均为 1 1 1,树上有 k k k 个关键点,关键点们在 0 0 0 的时间内相互可达, q q q 次询问,求 s → t s\to t st 的最短路。

Analysis

考虑暴力建图,则图上共有 ( n − 1 + n ( n − 1 ) 2 ) (n-1+\frac{n(n-1)}{2}) (n1+2n(n1))条边,在 n , k n,k n,k 均为最大的情况下,图上共有大约 2 × 1 0 10 2 \times 10^{10} 2×1010 条边,铁定 MLE

我们注意到,从 s s s t t t 只有两种情况:

  • 老老实实从树上走;
  • s s s 走到一个关键点 k 1 k_1 k1,穿越到另一个关键点 k 2 k_2 k2,再走到 t t t

第一种情况就是常规树上两点最短路。
第二种情况,根据贪心思想,选取的 k 1 , k 2 k_1,k_2 k1,k2 一定是距离 s , t s,t s,t 最近的两个。所以我们初始时一次 bfs 求出每个点 i i i 到传送门的距离 d s t i dst_i dsti,最终答案即为 d s t s + d s t t dst_s+dst_t dsts+dstt

Code

// Problem: P10289 [GESP样题 八级] 小杨的旅游
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P10289
// Memory Limit: 512 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include <iostream>
#include <queue>
#include <cmath>
using namespace std;using Graph = vector<vector<int>>;
const int INF = 1e9;struct LCA{int n, k;vector<int> dep;vector<vector<int>> f;Graph G;LCA() {}LCA(const Graph &tree): G(tree){n = G.size();k = (int)log2(n) + 1;dep.assign(n, 0);f.assign(n, vector<int>(k, -1));dfs(0, 0);}void dfs(int u, int fa){dep[u] = dep[fa] + 1;f[u][0] = fa;for(int i = 1; i < k; i++) f[u][i] = f[f[u][i - 1]][i - 1];for(auto v: G[u]){if(v == fa) continue;dfs(v, u);}}int lca(int x, int y){if(dep[x] < dep[y]) swap(x, y);for(int i = k - 1; i >= 0; i--)if(dep[f[x][i]] >= dep[y]) x = f[x][i];if(x == y) return x;for(int i = k - 1; i >= 0; i --)if(f[x][i] != f[y][i]){x = f[x][i];y = f[y][i];}return f[x][0];}int dist(int x, int y){return dep[x] + dep[y] - 2 * dep[lca(x, y)];}};signed main() {ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);int n, k, q;cin >> n >> k >> q;Graph G(n);for (int i = 0, u, v; i < n - 1; i++) {cin >> u >> v;u--, v--;G[u].push_back(v);G[v].push_back(u);}LCA tree(G);queue<int> que;vector<int> dis(n, INF);for (int i = 0, x; i < k; i++) {cin >> x;x--;que.push(x);dis[x] = 0;}while (que.size()) {int u = que.front();que.pop();for (auto v: G[u])if (dis[v] == INF) {dis[v] = dis[u] + 1;que.push(v);}}auto dist = [&](int x, int y) {return min(tree.dist(x, y), dis[x] + dis[y]);};for (int i = 0, u, v; i < q; i++) {cin >> u >> v;u--, v--;cout << dist(u, v) << endl;}return 0;
}

相关文章:

P10289 [GESP样题 八级] 小杨的旅游

Description 给定一棵 n n n 个点的树&#xff0c;每条边权值均为 1 1 1&#xff0c;树上有 k k k 个关键点&#xff0c;关键点们在 0 0 0 的时间内相互可达&#xff0c; q q q 次询问&#xff0c;求 s → t s\to t s→t 的最短路。 Analysis 考虑暴力建图&#xff0c;…...

网络编程 ----------- 4、组播与广播

1、广播 broadcast 广播是指向同一个网络中所有的主机传输数据只有传输层协议为 UDP协议时&#xff0c;才支持广播 TCP是端对端&#xff0c;广播是一对多 &#xff0c;所以无法符合其要求。 1&#xff09;广播地址 广播地址的计算&#xff1a; 子网掩码…...

最短路径算法:Bellman-Ford算法

引言 在图论中&#xff0c;Bellman-Ford算法是一种用于计算单源最短路径的算法。与Dijkstra算法不同&#xff0c;Bellman-Ford算法可以处理带有负权边的图&#xff0c;并且可以检测图中是否存在负权环。本文将详细介绍Bellman-Ford算法的定义、步骤及其实现。 Bellman-Ford算…...

爬虫:xpath模块及昵图网实例

xpath模块 from lxml import etreestr1 """ <div><ul><li class"item-0"><a href"link1.html">first item</a></li><li class"item-1"><a href"link2.html">second…...

高级java每日一道面试题-2024年8月03日-web篇-forward和redirect有什么区别?

如果有遗漏,评论区告诉我进行补充 面试官: forward和redirect有什么区别? 我回答: 在Java Web开发中&#xff0c;forward和redirect是Servlet容器提供的两种用于页面跳转的技术。它们的主要区别在于客户端感知的方式、URL地址的变化、请求对象的共享等方面。下面详细介绍两…...

如何让你的网站拥有更好的体验

在HTML中&#xff0c;属性是用于提供关于HTML元素的额外信息。接下来我们将讲解13个可以让用户拥有更好体验的HTML属性。 Accept 属性 我们可以在<input>元素&#xff08;仅适用于文件类型&#xff09;中使用accept属性来指定服务器可以接受的文件类型。 <input ty…...

opencascade AIS_TypeFilter AIS_XRTrackedDevice源码学习

opencascade AIS_TypeFilter 前言 通过它们的类型选择交互对象。该过滤器会对本地上下文中的每个交互对象提出问题&#xff0c; 以确定它是否具有非空的所有者&#xff0c;并且如果是&#xff0c;则检查它是否是所需类型。 如果对象在每种情况下都返回 true&#xff0c;则保留…...

使用Spring AOP监控指定方法执行时间

文章目录 一、加入pom依赖二、切面类和注解三、执行方法 一、加入pom依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>二、切面类和注解 import java.lang.…...

最新CSS3纵向菜单的实现

纵向菜单 通过下面例子&#xff0c;你会知道把列表转换成菜单的关键技术 a中的#是URL的占位符可以点击&#xff0c;真正用途中写实际URL <nav class"list1"><ul><li><a href"#">Alternative</a></li><li><…...

GooLeNet模型搭建

一、model import torch from torch import nn from torchsummary import summaryclass Inception(nn.Module):def __init__(self, in_channels, c1, c2 , c3 , c4):super(Inception, self).__init__()self.ReLU nn.ReLU()#路线1:1x1卷积self.p1_1 nn.Conv2d(in_channels i…...

使用ThreadLocal来存取单线程内的数据

一.什么是ThreadLocal&#xff1f; ThreadLocal&#xff0c;即线程本地变量。如果你创建了一个 ThreadLocal变量&#xff0c;那么访问这个变量的每个线程都会有这个变量的一个本地拷贝&#xff0c;多个线程操作这个变量的时候&#xff0c;实际是在操作自己本地内存里面的变量&…...

elasticsearch教程

1. 单点部署(rpm): #提前关闭firewalld,否则无法组建集群 #1. 下载ES rpm包 ]# https://www.elastic.co/cn/downloads #2. 安装es ]# rpm -ivh elasticsearch-7.17.5-x86_64.rpm #3. 调整内核参数(太低的话es会启动报错) echo "vm.max_map_count655360 fs.file-max 655…...

Arrays、Lambda表达式、Collection集合

1. Arrays 1.1 操作数组的工具类 方法名说明public static String toString(数组)把数组拼接成一个字符串public static int binarySearch(数组,查找的元素)二分查找法查找元素public static int[] copyOf(原数组,新数组长度)拷贝数组public static int[] copyOfRange(原数组…...

2024年前端趋势:全栈或许是不容错过的选择!

近年来&#xff0c;前端开发的技术不断推陈出新&#xff0c;2024年也不例外。在这个变化迅速的领域&#xff0c;全栈开发逐渐成为一股不容忽视的趋势。无论你是经验丰富的开发者&#xff0c;还是刚刚入门的新手&#xff0c;掌握全栈技术都能让你在竞争中脱颖而出。而在这个过程…...

MySQL 实战 45 讲(01-05)

本文为笔者学习林晓斌老师《MySQL 实战 45 讲》课程的学习笔记&#xff0c;并进行了一定的知识扩充。 sql 查询语句的执行流程 大体来说&#xff0c;MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层包括连接器、查询缓存、分析器、优化器和执行器。 连接器负责接收客…...

仓颉编程语言入门 -- Array数组详解

仓颉编程语言入门 – Array数组详解 一. 如何创建Array数组 我们可以使用 Array 类型来构造单一元素类型&#xff0c;有序序列的数据。 1.仓颉使用 Array 来表示 Array 类型。T 表示 Array 的元素类型&#xff0c;T 可以是任意类型 , 类似于泛型的概念 var arr:Array<St…...

C#初级——简单单例模式使用

单例模式 单例模式是一种常用的软件设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取这个实例&#xff0c;通过单例模式防止私有成员被多次引用&#xff0c;防止数据被随意纂改。本文使用的是线程不安全的懒汉式单例。 创建单例模式 首…...

2024.07.29 校招 实习 内推 面经

地/球&#x1f30d; &#xff1a; neituijunsir 交* 流*裙 &#xff0c;内推/实习/校招汇总表格 1、校招 | 美/团// 快驴、小象、优/选/事/业/部2024年校/园/招聘&#xff08;内推&#xff09; 校招 | 美团快驴、小象、优选事业部2024年校园招聘&#xff08;内推&#xff…...

速盾:爬虫攻击和cc攻击的区别是什么?

爬虫攻击和CC&#xff08;Distributed Denial of Service&#xff09;攻击是网络安全领域两种不同类型的攻击方式。尽管它们都涉及对目标网站或服务器的非法访问&#xff0c;但它们的目的、方法和影响各不相同。在接下来的文章中&#xff0c;我们将详细介绍这两种攻击方式的区别…...

Tomcat与Nginx的区别详解

目录 引言Tomcat概述 Tomcat的历史Tomcat的架构Tomcat的功能Nginx概述 Nginx的历史Nginx的架构Nginx的功能Tomcat与Nginx的区别 架构上的区别...

SuGaR与NeRF对比分析:为什么高斯泼溅是未来趋势

SuGaR与NeRF对比分析&#xff1a;为什么高斯泼溅是未来趋势 【免费下载链接】SuGaR [CVPR 2024] Official PyTorch implementation of SuGaR: Surface-Aligned Gaussian Splatting for Efficient 3D Mesh Reconstruction and High-Quality Mesh Rendering 项目地址: https://…...

电容耦合等离子刻蚀(CCP)在先进芯片制造中的关键作用与工艺优化

1. 电容耦合等离子刻蚀&#xff08;CCP&#xff09;技术解析 第一次接触CCP刻蚀设备时&#xff0c;我被它那看似简单却暗藏玄机的结构震撼到了——两块金属电极板&#xff0c;加上射频电源&#xff0c;就能实现纳米级的精密加工。这种利用电容耦合原理产生等离子体的技术&#…...

新手入门指南:在快马平台用AI生成代码理解云桌面基础概念

今天想和大家分享一个特别适合新手理解云桌面基础概念的实践方法。作为一个刚接触云计算的小白&#xff0c;我最初对"一台主机创建多个云桌面"这个概念也是一头雾水&#xff0c;直到在InsCode(快马)平台上尝试用AI生成代码来模拟这个过程&#xff0c;才真正搞明白其中…...

Adobe软件非正版弹窗终极解决方案:PS/Ai/PR/AE禁用提示一键清除指南

1. Adobe弹窗问题的根源分析 最近不少朋友打开Photoshop、Illustrator这些Adobe软件时&#xff0c;突然跳出一个烦人的提示框&#xff1a;"Your non-genuine Adobe app will be disabled soon"。这个警告不仅影响使用体验&#xff0c;严重时还会导致软件直接罢工。作…...

FastDDS XML配置实战:从HelloWorld到可配置QoS的完整迁移指南

FastDDS XML配置实战&#xff1a;从硬编码到灵活部署的工程化演进 在分布式系统开发中&#xff0c;数据分发服务(DDS)因其高效的实时通信能力被广泛应用于工业物联网、自动驾驶等领域。作为DDS规范的实现之一&#xff0c;FastDDS凭借其出色的性能和灵活性赢得了开发者青睐。本…...

二、空间碎片聚类-轨道计算与J2000坐标系实现

1. 整体思路 在空间碎片监测、卫星对地观测等任务中,需要精确知道卫星和空间目标在某一时刻的位置。通常我们使用开普勒轨道六要素(半长轴、偏心率、倾角、升交点赤经、近地点幅角、真近点角)来描述轨道,并通过轨道动力学外推得到任意时刻的位置。本文实现了一套基于J2000…...

SEO优化建站费用是多少_SEO建站平台有哪些_哪个比较好

SEO优化建站费用是多少&#xff1f;SEO建站平台有哪些&#xff1f;哪个比较好&#xff1f; 在当今数字化时代&#xff0c;建立一个成功的网站不仅仅是创建一个静态的信息展示平台&#xff0c;更是要通过SEO优化提升网站的可见性和流量。SEO优化建站费用是多少呢&#xff1f;SEO…...

嵌入式 - shell 常用语法简单总结

初步使用#!bin/bashecho "Hello world!"echo# shellvim helloworld.shchmod ux helloworld.sh# 在当前bash运行. helloworld.shsource helloworld.sh# 在子bash中运行&#xff0c;无法修改当前shell的变量./helloworld.shLinux中工具链的配置​ ~/.bashrc用于定义当前…...

DASD-4B-Thinking应用场景:科研人员用Chainlit调用长链思维模型写论文推导

DASD-4B-Thinking应用场景&#xff1a;科研人员用Chainlit调用长链思维模型写论文推导 安全声明&#xff1a;本文仅讨论技术实现与应用&#xff0c;所有内容均符合技术交流规范&#xff0c;不涉及任何敏感或违规内容。 1. 科研写作的新助手&#xff1a;当AI遇到学术研究 作为一…...

毕业设计实战:基于Java+MySQL的教务管理系统设计与实现指南

毕业设计实战&#xff1a;基于JavaMySQL的教务管理系统设计与实现指南 在开发“基于JavaMySQL的教务管理系统”毕业设计时&#xff0c;曾因课程报名表未通过学生ID与课程ID双外键关联踩过关键坑——初期仅设计报名编号、报名时间等基础字段&#xff0c;未与学生表、课程表建立关…...