zoukankan      html  css  js  c++  java
  • 动态树(施工中, 暂时只有模板)

    lct 维护有根树的实链剖分, 就像重链剖分一样, 每个点都有一个实儿子和一堆虚儿子。

    lct 的每个实链都用一颗独立的 splay 来维护, 节点都是原链中的节点编号, 满足二叉查找树性质的 key 值是节点在原树中的深度。另外,对于原树中的节点 x,若其在原树中的父亲的实儿子不是 x, 那么在 lct 中, x 所在的实链的 splay 的根的父节点指向 x 在原树的父亲, 另外,由于 splay 维护的是实链的信息, 那么 x 父亲并不会把 x 当作 splay 的子节点, 这就是 “认父不认子”。

    lct 有一个操作 access,它是 lct 的一些特色操作的基础。access (x) 表示将原树中的根 root 到 x 的路径划分成一个独立的实链, 这个操作由于认父不认子很好实现。

    LCT模板

    模板革新!


    目录


    模板

    记录

    精彩摘选:(论短路运算符和下标运算符的用法)

    const int MAXN = 1e5 + 5 ;
    
    int n, m, a[MAXN] ;
    int s[MAXN], pa[MAXN], ch[MAXN][2] ;
    // xor_sum  parent  children
    bool tag[MAXN] ;
    
    inline bool is(int x) { return x[pa][ch][0] != x && x[pa][ch][1] != x;} // isroot?
    inline void ud(int x) {	x[s] = x[a] ^ x[ch][0][s] ^ x[ch][1][s];}// update
    inline void rv(int x) {x[tag] ^= 1, std::swap(x[ch][0], x[ch][1]); }// reverse
    inline void ps(int x) { x[tag] && (rv(x[ch][0]), rv(x[ch][1]), x[tag] = 0);}
    // pushdown
    
  • 相关阅读:
    linux中添加ftp用户,并设置相应的权限
    mysql 命令管理
    阿里云服务器资料
    sql替换指定字段指定字符串
    apache本地域名ip重定向vhosts
    php数组序列化serialize与unserialize
    Android 开发第三天
    Android 开发第二天
    Android开发的第一天
    字符的截取方法使用的是Substring 和三目运算符
  • 原文地址:https://www.cnblogs.com/tztqwq/p/14579449.html
Copyright © 2011-2022 走看看