一、题目

点此看题

二、解法

回忆树直径的非dpdpdp求法,随便那一个点找到最远点,再从最远点找它的最远点就得到了直径。

这道题肯定不能暴力找,我们考虑新加入的点对直径的影响,设原来的直径端点是(A,B)(A,B)(A,B),算出新加入点为直径端点时的直径和原来的直径比较就知道他是不是直径的端点。而新加入点的最远点是谁呢?因为他父亲的最远点是A/BA/BA/B,所以他的最远点也是A/BA/BA/B,两种情况都考虑一下就行了,最后写一个倍增lcalcalca即可。

#include <cstdio>
#include <iostream>
using namespace std;
const int M = 1000005;
int read()
{int x=0,f=1;char c;while((c=getchar())<'0' || c>'9') {if(c=='-') f=-1;}while(c>='0' && c<='9') {x=(x<<3)+(x<<1)+(c^48);c=getchar();}return x*f;
}
int n,m,A,B,len,dep[M],fa[M][20];
void upd(int x,int p)
{fa[x][0]=p;dep[x]=dep[p]+1;for(int i=1;i<=19;i++)fa[x][i]=fa[fa[x][i-1]][i-1];
}
int lca(int u,int v)
{if(dep[u]<dep[v]) swap(u,v);for(int i=19;i>=0;i--)if(dep[fa[u][i]]>=dep[v])u=fa[u][i];if(u==v) return u;for(int i=19;i>=0;i--)if(fa[u][i]^fa[v][i])u=fa[u][i],v=fa[v][i];return fa[u][0];
}
int dis(int u,int v)
{return dep[u]+dep[v]-2*dep[lca(u,v)];
}
signed main()
{n=4;m=read();upd(2,1);upd(3,1);upd(4,1);A=2;B=3;len=2;while(m--){int x=read();upd(++n,x);upd(++n,x);if(dis(A,n)>len){len=dis(A,n);B=n;}if(dis(n,B)>len){len=dis(n,B);A=n;}printf("%d\n",len);}
}

CF379F New Year Tree相关推荐

  1. cf379F. New Year Tree

    链接 点击跳转 题解 做法一(TLE): 维护每个点到最远的儿子的距离disxdis_xdisx​ 设yyy的左右儿子为a,ba,ba,b,那么以yyy为lcalcalca的最长链的长度就是disa+ ...

  2. cf379F New Year Tree (树的直径+倍增lca)

    可以证明,如果合并两棵树,新的直径的端点一定是原来两树中直径的端点 可以把新加两个点的操作看成是把两个只有一个点的树合并到原来的树上,然后用其中的一个点去和原来树上的直径两端点更新直径就可以了 1 # ...

  3. 【倍增算法】CF379F New Year Tree 题解

    In LuoGu 题目大意: 每次在给定节点增加两个点,动态输出当时树的直径,注意强制动态. 思路详解: 对于新加入的两个节点,新树的直径必定在两个点到另一个叶子节点的距离中,否则,新树的直径肯定和原 ...

  4. 107. Binary Tree Level Order Traversal II

    题目 Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from l ...

  5. 102. Binary Tree Level Order Traversal

    题目 Binary Tree Level Order Traversal 层次遍历二叉树 链接 Given a binary tree, return the level order traversa ...

  6. Python---哈夫曼树---Huffman Tree

    今天要讲的是天才哈夫曼的哈夫曼编码,这是树形数据结构的一个典型应用. !!!敲黑板!!!哈夫曼树的构建以及编码方式将是我们的学习重点. 老方式,代码+解释,手把手教你Python完成哈夫曼编码的全过程 ...

  7. [Java]LeetCode297. 二叉树的序列化与反序列化 | Serialize and Deserialize Binary Tree

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  8. Code Forces Bear and Forgotten Tree 3 639B

    B. Bear and Forgotten Tree 3 time limit per test2 seconds memory limit per test256 megabytes inputst ...

  9. Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)

    Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...

最新文章

  1. Java成员变量与类变量_Java基础随记2-成员变量和类变量的区别
  2. 解决tomcat同时部署多个SpringBoot应用提示InstanceAlreadyExistsException
  3. 备份数据 宝塔linux_宝塔面板旧版本升级教程汇总—升级宝塔面板
  4. 洛谷UVA1328,POJ1961-Period【KMP,字符串】
  5. HTML_DOM简介
  6. linux文件系统扩容操作步骤,仅供参考
  7. Linq lambda表达式经验总结
  8. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(10)签到题2题
  9. 网站生成APP源代码 Flutter项目 带控制端
  10. 手电筒安卓_王思聪吃热狗数字时钟安卓apk下载安装ios现在
  11. 这种技术能够替代 Android 原生开发?
  12. 微信小程序审核未通过的 “N” 种原因
  13. 北极星指标——定义与制定标准
  14. xcode 项目 was compiled with optimization -stepping may behave oddly ;variable may not be available
  15. iOS开发 长按按钮变色问题
  16. 微信投票活动文明好人评选怎么刷票
  17. 概率论与数理统计复习全集(考研/期末复习)
  18. 接口测试是什么?如何做好接口测试?
  19. 「鲸准△创新季」项目投递正式开启 9家500强大企业虚位以待
  20. linux上的英文字体monospace可以在windows用吗?

热门文章

  1. 基于深度学习的火灾检测、森林草原火灾检测
  2. db2 数据库-错误码大全
  3. 个人职业目标如何计算机,个人职业目标规划
  4. 数据中心服务器冷却技术,数据中心高效液体冷却系统一
  5. Qt 中 moveToThread
  6. 网络安全相关可研方向调研
  7. PyCharm 破解激活 教程
  8. Python支付宝接口 解决方案
  9. 华为云会议智能会议室助力财通证券加速数字化
  10. Linux系统启动(银河麒麟)