首页 > 其他分享 >CF379F New Year Tree

CF379F New Year Tree

时间:2024-08-09 11:08:38浏览次数:7  
标签:dep ver int res Tree a1 fa New CF379F

题意

给定图:

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;
}

标签:dep,ver,int,res,Tree,a1,fa,New,CF379F
From: https://www.cnblogs.com/Yuan-Jiawei/p/18350399

相关文章

  • element--tree树形组件
    一、有一个default-expand-all是否默认展开所有节点的属性,只在第一次初始化tree的时候有效,改变这个属性的值好像不能控制展开折叠给出示例代码:<template><div><el-tree:data="treeData"ref="tree":default-expand-all="false"></el-tree><el-button@clic......
  • HDU6567 Cotree
    题意有两颗树,在每棵树中选择一个结点并将它们两相连使得对于新的树的任意两点的距离总和最小。思路设\(sz[u]\)表示子树\(u\)的大小。显然,将两数重心连接结果最优秀(根据树的重心定义)。对于每条边,取它两端\(sz\)较小的那一个点\(u\),那么这条边贡献为\(sz[u]*(n-sz......
  • 为什么 Python NewType 与 isinstance 和 type 不兼容?
    这似乎不起作用:fromtypingimportNewTypeMyStr=NewType("MyStr",str)x=MyStr("HelloWorld")isinstance(x,MyStr)我什至没有得到False,但是TypeError:isinstance()arg2mustbeatypeortupleoftypes因为MyStr是一个函数......
  • new_d_array()函数接受一个int类型的参数和double类型的参数。该函数返回一个指针,指向
    /*下面是使用变参函数的一段程序:include<stdio.h>include<string.h>incude<stdarg.h>voidshow_array(constdoublear[],intn);double*new_d_array(intN,...);intmain(void){doublep1;doublep2;p1=new_d_array(5,1.2,2.3,3.4,4.5,5.6);p2=new_d_ar......
  • loj6669 Nauuo and Binary Tree 题解
    https://loj.ac/p/6669赛时做法先\(n-1\)次问出深度逐层考虑。slv(vector<int>a,vector<int>b)表示在点集\(a\)中寻找\(b\)中点的父亲,询问\(a[0]\)和\(b\)中所有点的距离分治下去复杂度不会算,印象中过了树剖oiwiki二叉树:最多只有一个轻儿子类似「即时战略」......
  • SPOJ COT3 - Combat on a tree
    挺好的一个题,算是博弈和DS的有机结合这类问题一眼考虑SG函数,同时树上的SG函数一般都是从子树向上递推考虑若某个点的子树内全是黑点,则其SG函数为零;否则考虑枚举所有的后继状态不难发现选中一个白点会把这个子树断成一个森林,这个后继状态的SG函数就是每个连通块SG函......
  • QStyledItemDelegate 和QTreeView实现鼠标hover消息
    1.QTreeView设置属性mousetracking和tablettracing 重写QStyledItemDelegate类,重写函数booleditorEvent(QEvent*event,QAbstractItemModel*model,constQStyleOptionViewItem&option,constQModelIndex&index);这个函数里可以处理鼠标hover和点击事件;boolTreeTas......
  • CF29D Ant on the Tree
    AntontheTree题面翻译无环连通无向图称为树。树是一类图,不仅对于人很有趣,而且对蚂蚁也很有趣。蚂蚁站在树根处。他发现树中有N个顶点,它们由n-1条边连接,因此在任何一对节点之间都有一条路径。叶节点与根节点不同,它只与另一个节点相连。蚂蚁想要访问树中的每个节点并返回到根......
  • Java集合:Collection and Map;ArrayList;LinkList;HashSet;TreeSet;HashMap;TreeMap;Iterator:
        集合介绍:                        是一组变量类型(容器),跟数组很像。一,引用集合的原因(必要性):                  A:数组的空间长度固定,一旦确定不可以更改。多了浪费,少了报错。          B:使用数......
  • 论文解读:LSM Tree 的魔力,提升写入吞吐量的高效数据存储结构
    LSMTree是一种用于高写入吞吐量的数据库存储引擎,广泛应用于现代分布式数据库系统。其核心思想是将写入操作缓存在内存中,并定期批量写入磁盘,减少磁盘I/O操作,提高写入性能。因其高效的写入性能和适应大规模数据的能力,成为现代数据密集型应用的关键技术之一。LSM-tree主要由三......