首页 > 其他分享 >基环树的一些基本问题

基环树的一些基本问题

时间:2024-09-03 16:24:51浏览次数:3  
标签:基本 简洁 vis 队列 基环树 int 一些 单调

其实没啥。

主要就两个

一、求基环树的最大直径
二、判环的简洁办法

其中第一个问题比较关键,是一个非常常用的基环树森林模型。而且我基环树虽然写了7,8道了,写的却总是很冗长。基本全靠码力弥补才勉强不出错。。最近写的题目也是调了很久不出来,就是代码不够简洁导致的。很多细节可以处理的非常的简洁但是我却选择了复杂的思路。

一:

先说关键的模型吧。其实就是一个单调队列的事情。但是我之前没有想到这个,导致我赛时没做出来。后面只是弄懂了但是没有专门来补,所以也没有系统的整理这方面的东西。现在来整理了,也是因为刚刚好发现这个模型吧。大致就是先把链拆开,然后维护单调队列,我们把价值函数写出来\(val=s[i]+s[j]+d[j]-d[i]\),其中\(s[i]\)表示以第i个点为根的子树的深度,\(d[i]\)表示第\(i\)个点在链上的位置,其中\(j>i\)。我们可以发现,维护这个东西的最大值,其实就是对于\(j\)维护最大的\(s[i]-d[i]\),当一个位置的\(i_2\)满足\(s[i_2]-d[i_2]>s[i_1]-d[i_1]\),且\(i_2>i_1\),那么\(i_2\)就一定比\(i_1\)更优秀,在任何情况下都不可能会选择\(i_1\)。

我刚刚学的那段时间可能能够一眼看出来吧,因为确实是一个非常明显的单调性,随着长度的增加,之前不优秀的不会变的优秀。这个已经够明显了。

除此之外,还有树的直径的计算,可以直接用dp求最长路,我每次还写个次长。。导致要花掉挺多精力的。

二:

这个没有上一个问题关键,放个伪代码就懂了吧

int dfs_huan(int x)
{
    vis[x]=1;
    return (vis[u[x]]==1)?x:dfs_huan(u[x]);
}

当时看到了还楞了一下,真心挺简洁。

就这样吧,这些都是非常基础的。。我都不知道为什么要写这个,就像不知道为什么我没想到单调队列一样。

标签:基本,简洁,vis,队列,基环树,int,一些,单调
From: https://www.cnblogs.com/HLZZPawa/p/18394855

相关文章

  • 局域网通信时,解决在一些设备上NsdManager发现服务失败的问题
    1.背景:Google提供了NsdManagerApi以支持局域网发现服务,但是在实际中,一些个别型号手机设备上,NsdManager发现服务失败,mdns解析失败,找不到对应的服务名称,进而无法解析出本地网络内的host和端口。可能存在的问题原因:1.1设备兼容性问题硬件限制:一些低端或较老的设备可......
  • 【AI视频】Runway注册、基本设置、主界面详解
    博客主页:[小ᶻZ࿆]本文专栏:AI视频|Runway文章目录......
  • 6、DB-基本命令
    1、mysql-uroot-p123456--连接数据库 2、updatemysql.usersetauthentication_string=password('123456')whereuser='root'andHost='localhost';---修改密码 3、flushprivileges;---刷新权限4、showdatabases;......
  • Linux的基本命令
    1.linux的版本 Ubuntu、CentOS、Redhat、Debian、suse-Linux、鸿蒙(HarmonyOS)。鸿蒙系统是一款全新的面向全场景的分布式操作系统,以手机操作为主,链接汽车、智能音箱、可穿戴等设备的分布式操作系统。与Android等系统具有根本性不同,HarmonyOS创新多设备交互,让消费者操控多个......
  • 瑞芯微-I2S | 音频驱动调试基本命令和工具-基于rk3568-2【转】
    转自:https://www.cnblogs.com/yikoulinux/p/18102243基于Linux嵌入式设备常用调试方法很多,本文一口君把调试语音用到的工具和方法给大家做一个简单的介绍。1.procfs、sysfsLinux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪......
  • 【全网独家】OpenCV基本结构(Point、Size、Rect等)
    1.简介OpenCV(OpenSourceComputerVisionLibrary)是一个开源的计算机视觉和机器学习软件库。它提供了上千种图像处理和计算机视觉算法,广泛应用在各种领域,如机器人学、实时图像处理、模式识别等。2.基本结构介绍PointPoint用于表示图像中的二维点。可以用Point_<T>模......
  • 新手朋友在安装pbootcms经常遇到一些错误(PbootCMS 常见问题及解决方法)
    Parseerror:syntaxerror,unexpected':',expecting'{'问题描述:在 www\core\function\handle.php 文件第130行出现了语法错误,提示意外的冒号。原因分析:此错误通常出现在尝试在较旧的PHP版本上运行需要PHP7.x或更高版本的代码时。PHP7引入了一些新的语法特性,......
  • 通过对elements混入的方式设置一些公共方法
    importVuefrom'vue'importElementfrom'element-ui'importi18nfrom'@/lang'//import'../element-variables.scss'import{closeMenuOnScroll}from'@/mixin/close-menu-onscroll.js'importmessagefro......
  • vue3 pinia 的基本用法
    ‌Pinia是Vue3的状态管理器,用于跨组件或页面共享状态。以下是使用Pinia的基本步骤:‌安装Pinia‌:首先,你需要在项目中安装Pinia。你可以使用npm或yarn进行安装。例如,使用npm,你可以运行 npminstallpinia 命令来安装Pinia。‌创建Store‌:在Vue3中,你可以使用......
  • vue3 vue-router 的基本使用和配置方法
    在 vue3 中使用 vue-router 的基本步骤如下:1.安装vue-router:npminstallvue-router@42.创建一个 vue-router 实例并定义路由:import{createRouter,createWebHistory}from'vue-router';importHomefrom'./components/Home.vue';importAboutfrom'./com......