首页 > 其他分享 >2023.6.12 树节点的第k个祖先

2023.6.12 树节点的第k个祖先

时间:2023-06-12 11:46:43浏览次数:59  
标签:12 .. res usize fa let 2023.6 i32 节点

image

可以借鉴一下求LCA问题中的倍增思想。
fa[i][j]表示i号节点的第\(2^j\)个祖先。我们只需要用动态规划预处理出这个fa数组即可。
求第k个祖先,可以将k用二进制拼凑的方法划分成若干个2的整数次幂,然后利用fa数组对应地进行若干次跳跃即可,单个询问的时间复杂度\(O(logn)\)。

这里由于\(n < 5 \times 10^4\),所以\(M=log(n) + 1 = 16\)。

struct TreeAncestor {
    fa: Vec<Vec<i32>>
}

impl TreeAncestor {

    fn new(n: i32, parent: Vec<i32>) -> Self {
        let n = n as usize;
        let mut fa = vec![vec![-1; 16]; n];

        for i in 0..n { fa[i][0] = parent[i]; }
        for i in 0..n {
            for j in 1..16 {
                if fa[i][j - 1] != -1 { fa[i][j] = fa[fa[i][j - 1] as usize][j - 1]; }
            }
        }
        Self { fa }
    }
    
    fn get_kth_ancestor(&self, node: i32, k: i32) -> i32 {
        let mut res = node;
        for i in 0..16usize {
            if ((k >> i) & 1) == 1 { res = self.fa[res as usize][i] }
            if res == -1 { return -1; }
        }
        res
    }
}

标签:12,..,res,usize,fa,let,2023.6,i32,节点
From: https://www.cnblogs.com/st0rmKR/p/17474604.html

相关文章

  • C#.NET Framework RSA 私钥签名 公钥验签(验证签名) ver:20230612
    C#.NETFrameworkRSA私钥签名公钥验签(验证签名)ver:20230612 环境说明:.NETFramework4.6的控制台程序 。 .NETFramework 对于RSA的支持:NETFramework内置只支持XML格式的私钥/公钥。如果要用PKCS1,PKCS8格式的,要用到三方库BouncyCastle。 核心重点是拿到.NET......
  • 6-12|如何获取entry组建的值
    想要获取`Entry`组件中输入的值,可以使用以下两种方法:1.`get()`方法`get()`方法可以返回`Entry`组件中的文本,例如:```pythonimporttkinterastkroot=tk.Tk()entry=tk.Entry(root)entry.pack()defget_entry_value():  value=entry.get()  print(value)bu......
  • 123321
    <template><a-layoutid="root"style="height:100%;padding:10px;"><a-layout-siderdata-drop="move"id="menu"style="width:20%;padding:10px"><a-rowjustify="space-around&q......
  • 202306112142-《最近开发心得...》
     没有心得就是在瞎搞,写心得就是“埋头耕耕,抬头看看”,看看自己做了什么......    心得就是心的感受,并非得到了什么,我以前是搞前端开发,仅仅4-5年时间,见证Angular市场份额的减少,backbone还嫌有耳闻,鲜有招聘;React框架从耳闻到霸屏;个人沐浴jquery的春风,枯于市场类似Vue......
  • Debain 12 “Bookworm”来了
    经过近两年的辛勤工作,Debian12“Bookworm”终于问世了,它由长期支持的Linux6.1LTS内核系列驱动。这个内核带来了新的和更新的驱动程序,以支持现代硬件,并将在2026年12月之前获得官方支持。Debian12“Bookworm”将获得五年的支持,直到2028年6月。 Debian12“Bookworm”......
  • 练习12:通过Bar构建基础柱状图
    #通过Bar构建基础柱状图frompyecharts.chartsimportBarfrompyecharts.optionsimport*#构建柱状图对象bar=Bar()#添加x轴数据bar.add_xaxis(["中国","美国","英国"])#添加y轴数据bar.add_yaxis("GDP",[30,20,10])#绘图bar.render("基础......
  • leetcode 1171. 从链表中删去总和值为零的连续节点
    给你一个链表的头节点 head,请你编写代码,反复删去链表中由总和 值为0的连续节点组成的序列,直到不存在这样的序列为止。删除完毕后,请你返回最终结果链表的头节点。你可以返回任何满足题目要求的答案。(注意,下面示例中的所有序列,都是对 ListNode 对象序列化的表示。)示例1:输入:he......
  • Leetcode 1171. 从链表中删去总和值为零的连续节点
    题目:给你一个链表的头节点 head,请你编写代码,反复删去链表中由总和 值为0的连续节点组成的序列,直到不存在这样的序列为止。删除完毕后,请你返回最终结果链表的头节点。你可以返回任何满足题目要求的答案。(注意,下面示例中的所有序列,都是对 ListNode 对象序列化的表示。)难......
  • Debian 12 "bookworm" 发布 - 通用操作系统
    Debian12"bookworm"发布-通用操作系统基于Linuxkernel6.1LTS,支持APFS读写请访问原文链接:https://sysin.org/blog/debian-12/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgDebian12“bookworm”发布2023年6月10日经过1年9个月28天的开......
  • Debian 12 x86_64 OVF (sysin) - VMware 虚拟机模板
    Debian12x86_64OVF(sysin)-VMware虚拟机模板请访问原文链接:https://sysin.org/blog/debian-12-ovf/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgDebianGNU/Linux12(bookworm)(Linuxdebian6.1.0-amd64)部署截图及说明自定义OVF属性填写说明:......