• CF842E Nikita and game


    https://www.luogu.com.cn/problem/CF842E

    考虑树的直径有性质:当存在多条直径,若长度为偶数,则它们交于一点,且为直径中点;若长度为奇数,则交于中间那条边。

    于是记录下直径的中点(或中间那条边),同时对每个点维护到中点的距离
    那么查询的时候,答案就是这个距离的最大值个数。
    要是中间是边的情况,就对两个端点分别记录,拿最大值个数和次大值个数乘一乘大概就行。
    或者你再把每条边变成一个虚点。

    然后加叶子,对于加的这个叶子的父亲,看一下是不是当前的最大值或次大值,根据当前直径长度的奇偶性讨论,要移动到旁边的点/边上。
    移动完信息的变更发现是先把某子树内的距离都减一,再把剩下部分都加一。

    然后这个东西dfs+线段树就完了,离线下把整个树建好搞 dfs 序,每次加叶子变成激活一个节点,而未激活的节点不允许标记推上去

  • 相关阅读:
    gan研究思路
    官方文档的学习
    构建Pytorch虚拟环境
    桌面显示【我的电脑】
    【VUE】计数器模块
    【品优购】字体图标定位的做法
    029垃圾分代回收机制
    03特殊for语句
    28包 package
    jdk特性
  • 原文地址:https://www.cnblogs.com/suxxsfe/p/15244323.html
Copyright © 2020-2023  润新知