CF379F New Year Tree

news/2024/11/17 19:26:53/文章来源:https://www.cnblogs.com/Yuan-Jiawei/p/18350399

题意

给定图:

image

每次在叶子结点加入两个点,并实时输出树的直径长度。

思路

每次增加两个点,直径至多变化一个点,长度最多加 1,所以对加入的点处理 lca,并且更新长度和点即可。

代码

#include <bits/stdc++.h>using namespace std;const int N = 1000010;int fa[30][N], dep[N];void process(int u) {for (int i = 1; i < 30; i++) {fa[i][u] = fa[i - 1][fa[i - 1][u]];}
}int lca(int u, int v) {if (dep[u] < dep[v]) swap(u, v);for (int j = 29; j >= 0; j--) {if (dep[fa[j][u]] >= dep[v]) u = fa[j][u];}if (u == v) return u;for (int j = 29; j >= 0; j--) {if (fa[j][u] != fa[j][v]) {u = fa[j][u];v = fa[j][v];}}return fa[0][u];
}int dis(int u, int v) {return dep[u] + dep[v] - 2 * dep[lca(u, v)];
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int q;cin >> q;fa[0][2] = fa[0][3] = fa[0][4] = 1;dep[2] = dep[3] = dep[4] = 1;int a1 = 2, a2 = 3, res = 2, ver = 5;for (int opt = 1; opt <= q; opt++) {int x;cin >> x;fa[0][ver] = fa[0][ver + 1] = x;dep[ver] = dep[ver + 1] = dep[x] + 1;process(ver);process(ver + 1);int len1 = dis(a1, ver);int len2 = dis(a2, ver);int len3 = dis(a1, ver + 1);int len4 = dis(a2, ver + 1);if (len1 > res) {res = len1;a2 = ver;}else if (len2 > res) {res = len2;a1 = ver;}else if (len3 > res) {res = len3;a2 = ver + 1;}else if (len4 > res) {res = len4;a1 = ver + 1;}cout << res << '\n';ver += 2;}return 0;
}

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

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

相关文章

【总结】注册码泄露原理以及例题

该题目采用了SIMD指令集,该指令格式在CTF和攻防对抗中经常出现,可以提高执行效率的同时也可以增加逆向的难度。对于此类指令和题目,我们分析的方法是:遇到查意思,查的多了就跟看正常代码一样,采用动态分析。引言 题目给了小明的机器码:1653643685031597 用户user_id:xi…

Docker Desktop 出现 Unable to calculate image disk size 错误提示的解决方法

Win11安装了Docker Destop,版本为4.25.2。Docker Desktop能随系统启动而启动,其内部管理的容器也可以正常启动,但是不和谐的地方也出现了: 在从通知区域双击Docker Desktop的图标后,它就会出现如下错误信息,虽不影响使用,但是相当碍眼:解决方案: 【1】进入设置,关闭“…

docker pull实现断点续传

本文介绍了使用Docker从DockerHub上下载容器镜像时很有可能出现的网络中断的问题。默认情况下,如果Docker下载镜像的过程中被中断了,是要从头开始下载的,而且再次下载也有可能受到网络波动的影响。这里提供了一种配置docker参数文件的方法,以及在该方案不生效的情况下的手动…

清除电脑c盘空间—Windows.edb

前言:一大早发现电脑好卡,然后看c盘居然红了,238G的总空间呢,按理现有软件不会占用这么多内存的。 1、火绒的垃圾清理走一波,没清掉多少 2、c盘右键=》属性=》常规下的 磁盘清理 ,也没清掉多少 3、c盘右键=》有个释放c盘空间,点开后发现是wps清理大师,不知道什么时候存…

简单理解H264编码

H264视频码流原理参考帖子:https://blog.csdn.net/go_str/article/details/80340564?spm=1001.2014.3001.5502 0、序言: 首先要弄明白编码的目的。当你此刻显示器正在播放一个视频,分辨率为1280*720,帧率为25,那么一秒所产生正常的数据大小为:1280*720(像素)*25(张)…

.NET 8 + Blazor 多租户、模块化、DDD框架、开箱即用

前言 基于 .NET 8 的开源项目,主要使用 WebAPI + Blazor 支持多租户和模块化设计,DDD构建。可以帮助我们轻松地搭建起一个功能完善的Web应用程序。除了帮助你快速构建应用程序之外,项目也可以当做学习资料。我们可以从中了解到多租户、CQRS、DDD架构、云部署、Docker容器化等…

日程表-获取当前周,点击切换上一周和下一周

获取本周的开始日期和结束日期(本周周一到周日):var currentTime = new Date() this.getThisWeekData(currentTime, 0)点击切换上周的周历(把当前周的周一的时间传进去就行,如“2024-08-05”): this.getThisWeekData(currentData.startData, -7)点击切换下周的周历(把当前…

「代码随想录算法训练营」第三十三天 | 动态规划 part6

322. 零钱兑换题目链接:https://leetcode.cn/problems/coin-change/ 文章讲解:https://programmercarl.com/0322.零钱兑换.html 题目难度:中等 视频讲解:https://www.bilibili.com/video/BV14K411R7yv/ 题目状态:略微有点思路,但还是有点转不过来。思路: 这次是找最小的…

工序汇报保存时提示“汇报数量大于领料数量”

1、配方单没有下推生产领料,生产订单的领料套数为0 2、该校验和领料套数基于配方单”是否关键件”的物料下推生产领料的情况。

09 DMA配合ADC多通道

[TOG] 前言 前面介绍了ADC数模转换,得到了内部的温度值和外部电压值,我感觉这样太消耗CPU的资源了,所以我准备用DMA来帮我从AD的数据寄存器中拿出数据出来,就不用再去读取AD的数据寄存器了。 一、什么是DMA DMA叫做直接存储器存取,就不需要我们CPU通过软件将外部寄存器或者…

快速基于 ClickHouse + Grafana 搭建可观测性解决方案 - 分布式链路追踪篇(ClickHouse 官方博客)

引言 在 ClickHouse,我们认为可观测性仅仅是另一个实时分析问题。作为一款高性能的实时分析数据库,ClickHouse 被用于多种场景,包括时间序列数据的实时分析。其应用场景的多样性推动了大量分析函数的发展,这些函数有助于查询大多数数据类型。这些查询特性和高压缩率使得越来…

使用 defineNuxtComponent`定义 Vue 组件

title: 使用 defineNuxtComponent`定义 Vue 组件 date: 2024/8/9 updated: 2024/8/9 author: cmdragon excerpt: 摘要:本文介绍了在Nuxt 3中使用defineNuxtComponent辅助函数定义类型安全的Vue组件的方法,适用于习惯Options API的开发者。defineNuxtComponent支持asyncData…