【2024蓝桥杯/C++/A组/零食采购】

题目

方法

最近公共祖先lca的倍增算法binary lifting

深度优先搜索

二进制模拟

代码

#include<bits/stdc++.h>
using namespace std;// 定义常量N
const int N = 1e5+10;// 边的集合
vector<int> edge[N];
// 每个节点对应的数值
int num[N];
// 父节点数组,fa[i][j][0]表示节点i在第2^j层的父节点,fa[i][j][1]表示从i到2^j层父节点的路径上种类二进制数
int fa[N][25][2];
// 节点的深度
int d[N];
// 输入的节点数和查询次数
int n, q;// 深度优先搜索,初始化每个节点的深度和第一个父节点信息
void dfs(int from, int u)
{d[u] = d[from]+1;fa[u][0][0] = from;fa[u][0][1] = num[from];for(auto to : edge[u]){if(to == from) continue;dfs(u, to);}
}
// 初始化所有节点的父节点信息
void init()
{// 从2^1层到2^20层for(int i = 1; i < 20; i++){// 对每个节点进行处理for(int j = 1; j <= n; j++){// 找到当前节点j的2^i层父节点,即其2^(i-1)层父节点的2^(i-1)层父节点fa[j][i][0] = fa[fa[j][i-1][0]][i-1][0]; // 将从j到2^i层父节点的路径上的数值或运算结果计算出来,即先到2^(i-1)层父节点,再继续到2^i层父节点fa[j][i][1] = fa[j][i-1][1] | fa[fa[j][i-1][0]][i-1][1]; }}
}
// 计算一个整数中1的个数
int cnt(int x)
{int result = 0;while(x){if(x & 1) result++;x >>= 1;}return result;
}
// 最近公共祖先算法实现,返回从节点a到节点b路径上的数值或运算结果中1的个数
int lca(int a, int b)
{int tmp = num[a] | num[b];if(d[a] < d[b])  swap(a, b);// 让a和b处于同一深度for(int i = 19; i >= 0; i--){if(d[fa[a][i][0]] >= d[b]) //a始终比b深或者刚好一样深{tmp |= fa[a][i][1];a = fa[a][i][0];}}// 如果此时a和b相同,则直接返回tmp中1的个数if(a == b) return cnt(tmp);// 如果ab某一父节点不同,跳至,退出时父节点应一致for(int i = 19; i >= 0; i--){if(fa[a][i][0] != fa[b][i][0]) //父节点不同{tmp |= fa[a][i][1];tmp |= fa[b][i][1];a = fa[a][i][0];b = fa[b][i][0];}}tmp |= fa[a][0][1]; //纳入父节点的种类return cnt(tmp);
}
// 主函数
int main()
{// 输入节点数n和查询次数qcin >> n >> q;// 输入每个节点对应的数值,并将其转换为对应位置的二进制位设置为1for(int i = 1; i <= n; i++){int t;cin >> t;num[i] = 1 << (t-1);}// 构建树结构for(int i = 1; i < n; i++){int from, to;cin >> from >> to;edge[from].push_back(to);edge[to].push_back(from);}// 初始化每个节点的深度和第一个父节点信息dfs(0, 1);// 初始化所有节点的父节点信息init();// 处理查询for(int i = 1; i <= q; i++){int from, to;cin >> from >> to;cout << lca(from, to) << endl;}return 0;
}

感想

首先通过dfs将各个结点的直接父节点初始化

之后通过init将各个节点的各级父节点初始化

纳入ab节点的种类数。

倍增算法中首先保证a深度大于b,然后通过从远到近尝试跳跃,过程中以a的父节点深度小于b深度来控制,最终使得ab同一深度。

之后通过从远到近尝试跳跃,过程中以a的父节点不等于b的父节点来控制,最终使得ab同一直接父节点

最终将a的直接父节点的种类数纳入答案。

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

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

相关文章

VS code 与Pycharm 的使用区别(个人)

注明&#xff1a;本文从这开始VS code简称VS&#xff0c;Pycharm简称PY 安装包大小 VS:PY 1:0 安装后实际大小 vs py VS:PY 2:0 界面ui&#xff08;简易&#xff09; vs py VS:PY 2:1 启动速度 VS:PY 3:1 注&#xff1a;以上为个人测评&#xff0c;无特殊意图

DHCP笔记

DHCP---动态主机配置协议 作用&#xff1a;为终端动态提供IP地址&#xff0c;子网掩码&#xff0c;网关&#xff0c;DNS网址等信息 具体流程 报文抓包 在DHCP服务器分配iP地址之间会进行广播发送arp报文&#xff0c;接收IP地址的设备也会发送&#xff0c;防止其他设备已经使用…

Google Test 学习笔记(简称GTest)

文章目录 一、介绍1.1 介绍1.2 教程 二、使用2.1 基本使用2.1.1 安装GTest &#xff08;下载和编译&#xff09;2.1.2 编写测试2.1.3 运行测试2.1.4 高级特性2.1.5 调试和分析 2.2 源码自带测试用例2.3 TEST 使用2.3.1 TestCase的介绍2.3.2 TEST宏demo1demo2 2.3.3 TEST_F宏2.3…

【SOC 芯片设计 DFT 学习专栏 -- DFT OCC 与 ATPG的介绍】

请阅读【嵌入式及芯片开发学必备专栏】 请阅读【芯片设计 DFT 学习系列 】 如有侵权&#xff0c;请联系删除 转自&#xff1a; 简矽芯学堂 简矽芯学堂 2024年01月18日 09:00 陕西 文章目录 OCC 介绍Fast ScanFull chip ATPGPartition ATPGHierarchical ATPG OCC 介绍 OCC&am…

反激Flyback从逆向到初步设计(UC2844)

一.Flyback基本拓扑 国标gb/t 12325-2008《电能质量供电电压偏差》规定&#xff1a;220v单向供电电压偏差为标称电压的-10%&#xff0c;7%。 对应220V的标称电压&#xff0c;其浮动范围是在198~235.4V。以下运算均基于此规定进行。 首先220V进入EMI模块&#xff0c;消除差模干扰…

SSRF学习笔记

1.NAT学习 Nat&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;是 一种网络通信技术主要用于将私有网络中的内部IP地址转换成公共网络中的公共IP地址&#xff0c;以实现局域网内部设备访问互联网的功能。具体来说&#xff0c;Nat有以下几个主要…

redis的学习

! 快速入门 安装 1.使用docker安装redis docker pull redisdocker run -d --name redis -p 6379:6379 --restart unless-stopped -v /etc/docker/Redis/data:/data -v /etc/docker/Redis/conf/redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/e…

小白也能读懂的ConvLSTM!(开源pytorch代码)

ConvLSTM 1. 算法简介与应用场景2. 算法原理2.1 LSTM基础2.2 ConvLSTM原理2.2.1 ConvLSTM的结构2.2.2 卷积操作的优点 2.3 LSTM与ConvLSTM的对比分析2.4 ConvLSTM的应用 3. PyTorch代码参考文献 仅需要网络源码的可以直接跳到末尾即可 1. 算法简介与应用场景 ConvLSTM&#x…

【漏洞复现】phpStudy 小皮 Windows面板 存在RCE漏洞

靶场资料后台自行领取【靶场】 image-20240726092307252 PhpStudy小皮面板曝RCE漏洞&#xff0c;本质是存储型XSS引发。攻击者通过登录用户名输入XSS代码&#xff0c;结合后台计划任务功能&#xff0c;实现远程代码执行&#xff0c;严重威胁服务器安全。建议立即更新至安全版…

OpenSSL SSL_connect: Connection was reset in connection to github.com:443

OpenSSL SSL_connect: Connection was reset in connection to github.com:443 目录 OpenSSL SSL_connect: Connection was reset in connection to github.com:443 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&…

机器视觉12-相机

相机 作用: 工业相机 是 机器视觉系统 的重要组成部分 最本质的功能就是通过CCD或CMOS成 像传感器将镜头产生的光信号转变为 有序的电信号&#xff0c;并将这些信息通过相 应接口传送到计算机主机 工业相机分类 目前业内没有对相机进行明确的分类定义&#xff0c; 以下分类是…

正点原子 通用外设配置模型 GPIO配置步骤 NVIC配置

1. 这个是通用外设驱动模式配置 除了初始化是必须的 其他不是必须的 2. gpio配置步骤 1.使能时钟是相当于开电 2.设置工作模式是配置是输出还是输入 是上拉输入还是下拉输入还是浮空 是高速度还是低速度这些 3 和 4小点就是读写io口的状态了 3. 这个图是正点原子 将GPIO 的时…

鸿蒙开发—黑马云音乐之Music页面

目录 1.外层容器效果 2.信息区-发光效果 3.信息区-内容布局 4.播放列表布局 5.播放列表动态化 6.模拟器运行并配置权限 效果&#xff1a; 1.外层容器效果 Entry Component export struct MuiscPage {build() {Column() {// 信息区域Column() {}.width(100%)// .backgroun…

带有扰动观测器的MPC电机控制

模型预测控制(Model Predictive Contro1, MPC)是一种先进的控制策略&#xff0c;虽然具有鲁棒性、建模简单、处理多变量系统、显示约束、预测未来行为和优化性能的能力等优势。它的不足在于预测控制行为的计算需要繁琐的计算量&#xff0c;以及抗干扰能力较弱。这里提出基于扰动…

GPIO子系统

1. GPIO子系统视频概述 1.1 GPIO子系统的作用 芯片内部有很多引脚&#xff0c;这些引脚可以接到GPIO模块&#xff0c;也可以接到I2C等模块。 通过Pinctrl子系统来选择引脚的功能(mux function)、配置引脚&#xff1a; 当一个引脚被复用为GPIO功能时&#xff0c;我们可以去设…

数组模拟单调栈--C++

本题的计算量较大&#xff0c;用暴力算法会超时&#xff0c;的用别的方法&#xff0c;我们假设在左边找第一个比它小的数&#xff0c;那么在左边出现一次的数如果比右边大了&#xff0c;那么就不会在出现了&#xff0c;我们将它删除掉就可以了&#xff0c;用这个方法我们可以的…

28.Labview界面设计(上篇) --- 软件登陆界面设计与控件美化

摘要&#xff1a; 作为GUI界面设计的老大哥般的存在&#xff0c;Labview本身的G语言属性就展现了其优越的外观设计能力&#xff0c;其中不乏许多编程爱好者、架构师等的喜欢使用Labview进行界面相关的设计&#xff0c;而使用Matlab、Python等软件写底层数据处理模块、自动化脚本…

Javaweb项目|springboot医院管理系统

收藏点赞不迷路 关注作者有好处 文末获取源码 一、系统展示 二、万字文档展示 基于springboot医院管理系统 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringSpringMVCMyBatisVue 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 编号&#xff1a;…

通信原理-思科实验五:家庭终端以太网接入Internet实验

实验五 家庭终端以太网接入Internet实验 一实验内容 二实验目的 三实验原理 四实验步骤 1.按照上图选择对应的设备&#xff0c;并连接起来 为路由器R0两个端口配置IP 为路由器R1端口配置IP 为路由器设备增加RIP&#xff0c;配置接入互联网的IP的动态路由项 5.为路由器R1配置静…

如何使用Firefox浏览器连接IPXProxy设置海外代理IP教程

​Firefox浏览器是大家上网时经常会使用的一款工具。不过&#xff0c;有时候我们会遇到一些网站无法直接访问的情况。这时候&#xff0c;通过海外代理IP&#xff0c;比如像IPXProxy代理这样的服务&#xff0c;可能就能帮助我们进入那些受限制的网站&#xff0c;获取我们所需的资…