P8805 [蓝桥杯 2022 国 B] 机房

P8805 [蓝桥杯 2022 国 B] 机房

分析

是一道lca题目,可以直接套模板 + 前缀和处理点权

具体思路:

1.n台电脑用n-1条网线相连,任意两个节点之间有且仅有一条路径(拆分成各自到公共祖先节点的路径——lca);

2.“延迟时间”:看成是节点点权(要求一条链上某个区间的值——前缀和)

——用sum[]存储根节点到 i 节点的点权和

LCA

三种求法:

(1)朴素求法:

先将两点位于同一深度,然后同时向上跳;一次查询:O(n^2)

(2)倍增求法:

朴素求法的改进版(朴素是一步一步跳,倍增是用f[][]优化,每次向上都是以其父节点为目标)

(3)Tarjan(留一下,还没学~)

倍增求法的步骤:

1.存图/树

2.dfs(int x,int father)更新f[][](表示节点 i 的第2^j个祖先节点)、d[](深度)

(1)更新d[x]和f[x][0]

(2)for(1~20)更新f[x][i]

(3)for(遍历邻接点)递归dfs()

3.lca

(1)先将两点跳到同一深度(深度大的往上跳)

(2)若相等,则该点就是lca;若不相等,则从大到小,如果f[][]不等,则更新两点,lca=f[x][0]

代码 

#include<iostream>
#include<cstring>
using namespace std;const int N = 100010;
int head[N],d[N],f[N][30],a[N],sum[N],cnt,n,m;
struct edges{int to;int ne;
}e[N*2];//存两条边记得数组开成2倍//初始化别忘了(容易忘建议直接写main中)
void init()
{memset(head,-1,sizeof head);
}
//链式前向星存边
void addedge(int u,int v)
{e[cnt].to = v;e[cnt].ne = head[u];head[u] = cnt ++;
}
//dfs处理d[]、f[][]、sum[]
void dfs(int x,int father)
{d[x] = d[father] + 1;f[x][0] = father;sum[x] = sum[f[x][0]] + a[x];  //lca模板多了这一步~for(int i = 1;i <= 20;i ++){f[x][i] = f[f[x][i-1]][i-1];}for(int i = head[x];i != -1;i = e[i].ne){int j = e[i].to;if(j == father) continue; //加的是双向边,所以邻接点有其父节点,遍历时跳过dfs(j,x);	//递归遍历}return ;
}
//lca找到最近公共祖先节点
int lca(int u,int v)
{if(d[u] < d[v]) swap(u,v);for(int i = 20;i >= 0;i --){if(d[f[u][i]] >= d[v]) u = f[u][i];}if(u == v){return u;}for(int i = 20;i >= 0;i --){if(f[u][i] != f[v][i]){u = f[u][i];v = f[v][i];}}return f[u][0];
}int main()
{init();scanf("%d %d",&n,&m);for(int i = 0;i < n - 1;i ++){int u,v;scanf("%d %d",&u,&v);a[u] ++,a[v] ++;addedge(u,v),addedge(v,u);}dfs(1,0);while(m --){int u,v;scanf("%d %d",&u,&v);int mid = lca(u,v);int ans = sum[u] + sum[v] - 2 * sum[mid] + a[mid];  //两点之间的权值和printf("%d\n",ans);}return 0;
}

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

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

相关文章

Delphi7:SuperObject 的示例

SuperObject 不是一个 Delphi 7 自带或官方的库&#xff0c;但可能是指一些开源的 JSON 解析库&#xff0c;比如 superobject 或 dwscript 中的 SuperObject。这些库通常用于解析和生成 JSON 数据。 以下是一个基于假设的 SuperObject 用法概述&#xff0c;因为不同的库可能有…

波搜索算法(WSA)-2024年SCI新算法-公式原理详解与性能测评 Matlab代码免费获取

​ 声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 原理简介 一、初始化阶段 二、全…

我与C++的爱恋:string类的常见接口函数

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;我与C的爱恋 朋友们大家好啊&#xff0c;本节我们来到STL内容的第一部分&#xff1a;string类接口函数的介绍 ​ ​ 1.string类的认识 给大家分享一个c文档 https://legacy.cplusplus.…

Weblogic 管理控制台未授权远程命令执行漏洞(CVE-2020-14882,CVE-2020-14883)

1 漏洞概述 Weblogic Pre-Auth Remote Command Execution 漏洞&#xff08;CVE-2020-14882, CVE-2020-14883&#xff09;是针对 Oracle WebLogic Server 的两个安全漏洞。CVE-2020-14882 允许远程用户绕过管理员控制台组件中的身份验证&#xff0c;而 CVE-2020-14883 则允许经…

Python3 笔记:Python的函数

函数是编写好的&#xff0c;可重复调用的&#xff0c;用来实现某一功能的一段代码。 也可以理解为做某事的方法和步骤。第一次做的时候写好了方法&#xff0c;下次同类型的事直接拿来就用。 Python 内部有很多功能强大的内置函数供我们使用&#xff0c;除此之外&#xff0c;你…

Nagle算法

Nagle算法简介 Nagle算法主要是避免发送小的数据包&#xff0c;要求TCP连接上最多只能有一个未被确认的小分组&#xff0c;在该分组的确认到达之前不能发送其他的小分组。 在默认的情况下,Nagle算法是默认开启的&#xff0c;Nagle算法比较适用于发送方发送大批量的小数据&…

Sam Blackshear谈Move语言的起源

Move编程语言作为Sui生态系统的关键组成部分&#xff0c;通过可编程交易区块等机制支持其独特的对象数据模型&#xff0c;并支持高效的代码。五年前&#xff0c;Mysten Labs的联合创始人兼首席技术官Sam Blackshear创建了Move。他专门设计了Move&#xff0c;用于编写智能合约&a…

数据库SQL查询语句汇总详解

SQL是一种强大的编程语句&#xff0c;可用于操作和提取数据库中的数据。如果你对编程语句有所让步&#xff0c;那么你可能对SQL的力量感到难以置信。本文将带你深入探索SQL查询的世界&#xff0c;让你了解SQL语句的各种查询方式&#xff0c;并以实例进行详解。 1. SELECT基础查…

Iterator底层源码分析

/** * Iterator用于遍历Collection下的集合&#xff0c;Collection下的每个集合底层实现不一样&#xff0c;意味着遍历逻辑也不一样&#xff0c; * 所以Java的设计者将Iterator设计成了接口&#xff0c;让Collection下的每个集合实现Iterator */ public interface Iterator<…

英伟达的GPU(1)

又好久没更新了,一方面是最近事情有点多,另一方面最近也确实有点懒。 之前我说要把硬件部分补完,要写Nvidia的GPU,我估计一篇写不完,所以先写点。 早先的硬件文章可以参考: 上一篇:解读神秘的华为昇腾910 (qq.com) 上上一篇Microsoft Maia (qq.com) 上上上篇Google的…

sqli-labs靶场第十四关

目录 1&#xff1a;分析 找闭合符&#xff1a; 2&#xff1a;开始注入 报错注入&#xff1a; 注入数据库名&#xff1a; 注入表名&#xff1a; 注入列名&#xff1a; 注入具体值&#xff1a; 1&#xff1a;分析 经过我们的实验发现当我们输入的密码后面存在双引号时会报…

【C++】学习笔记——多态_1

文章目录 十二、继承8. 继承和组合 十三、多态1. 多态的概念2. 多态的定义和实现虚函数重写的两个特殊情况override 和 final 3. 多态的原理1. 虚函数表 未完待续 十二、继承 8. 继承和组合 我们已经知道了什么是继承&#xff0c;那组合又是什么&#xff1f;下面这种情况就是…

英语学习笔记13——A new dress

A new dress 一件新连衣裙 词汇 Vocabulary colour / color n. 颜色 v. 上色&#xff0c;涂色  英  美 颜色短语&#xff1a;green hand 新手      black tea 红茶      white house 白宫      black sheep 害群之马 英文颜色类词汇&#xff1a; red 红色…

鸿蒙开发接口Ability框架:【ApplicationContext】

ApplicationContext ApplicationContext模块提供开发者应用级别的的上下文的能力&#xff0c;包括提供注册及取消注册应用内组件生命周期的监听接口。 说明&#xff1a; 开发前请熟悉鸿蒙开发指导文档&#xff1a; gitee.com/li-shizhen-skin/harmony-os/blob/master/README.m…

静态IP代理:网络世界的隐秘通道

在数字化时代&#xff0c;网络安全和隐私保护日益受到重视。静态IP代理作为一种网络服务&#xff0c;为用户提供了一个稳定且可预测的网络连接方式&#xff0c;同时保护了用户的在线身份。本文将从五个方面深入探讨静态IP代理的概念、优势、应用场景、技术实现以及选择时的考量…

C语言学习【printf函数和scanf函数】

C语言学习【printf函数和scanf函数】 printf()函数和scanf()函数可以让用户与程序交流&#xff0c;是输入/输出函数 printf()函数 请求printf()函数打印数据的指令要与待打印数据的类型相匹配。例如&#xff0c;打印整数时使用%d&#xff0c;打印字符时使用%c。这些符号被称…

实战项目技术点(1)

1、什么是REST&#xff1f; REST&#xff08;Representational State Transfer&#xff09;&#xff0c;表述性状态转换&#xff0c;它是一种软件架构风格。传统URL风格如下&#xff1a; http://localhost:8080/user/getById?id1 GET&#xff1a;查询id为1的用户 http://loc…

网络常识一:常用工具

作为后端开发&#xff0c;特别是网络游戏后端开发&#xff0c;经常需要处理各种现网问题&#xff0c;其中有不少是网络相关的。 下面列举的工具主要是在 linux 下的&#xff0c;诊断线上服务器问题的时候&#xff0c;往往是分秒必争&#xff0c;所以这些工具都要用得很熟练&am…

程序在银河麒麟系统下实现开机自启及创建桌面快捷方式

目录 1. 机器环境说明 2. 程序开机自启动设置 2.桌面快捷方式设置 3. 附加说明 1. 机器环境说明 机器安装的银河麒麟操作系统属性如下&#xff1a; 2. 程序开机自启动设置 第1步&#xff1a;编写一个脚本,用于自动化启动&#xff0c;为便于后文描述&#xff0c;该脚本名称…

干货教程【软件篇】| 免费实现游戏加速自由

需要这个游戏加速软件的小伙伴可以关注一下文章底部公众号&#xff0c;回复关键词【zdjs】即可获取。 该软件可以实现免费的游戏加速&#xff0c;实测延迟低体验好&#xff01; 建议看到后赶紧保存下来防止丢失&#xff01; 下面讲一下该软件安装流程~ 通过链接可以得到下面…