距离一个点最远的点一定是直径的一个端点。
考虑运用这个原理,每次维护一下直径端点即可。

 #include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std; #define N 500010
#define M 20 int dep[N<<],f[M][N<<]; int n;
int q,k;
int v=,m=; int main()
{
dep[]=dep[]=dep[]=;
n=;
scanf("%d",&q);
while (q--)
{
scanf("%d",&k);
k--;
f[][n]=f[][n+]=k;
dep[n]=dep[n+]=dep[k]+;
for (int i=;i<M && f[i-][f[i-][n]];i++)
f[i][n]=f[i][n+]=f[i-][f[i-][n]];
if (dep[n]>dep[v])
v=n,++m;
else if (dep[n]+dep[v]>m)
{
int x=v,y=n;
for (int i=;i<M && dep[x]!=dep[y];i++)
if ((dep[x]-dep[y]) & (<<i))
x=f[i][x];
for (int i=M-;i>=;i--)
if (f[i][x]!=f[i][y])
x=f[i][x],y=f[i][y];
if (dep[n]+dep[v]-(dep[f[][x]]<<)>m)
++m;
}
n+=;
printf("%d\n",m);
}
return ;
}

最新文章

  1. “RazorEngine.Templating.TemplateParsingException”类型的异常在 RazorEngine.NET4.0.dll 中发生,但未在用户代码中进行处理 其他信息: Expected model identifier.
  2. Leetcode 39. Combination Sum
  3. js获取新浪天气接口
  4. swift-sharesdk集成微信、Facebook第三方登录
  5. [OpenCVsharp]利用指针实现高速访问像素RGB值
  6. XML 简介
  7. python3 异常处理
  8. berkeley db replica机制 - election algorithm
  9. asp.net脚本获取不到id,服务器控件id生成html页面id控制
  10. Eclipse中添加web dynamic project
  11. iOS 程序打包,安装流程
  12. JavaScript高级编程(一)
  13. LiBsvm用于多分类时训练模型参数含义
  14. 把消息送到默认窗口函数里,并非一点用都没有,可能会产生新的消息(以WM_WINDOWPOSCHANGED为例)
  15. information_schema.engines学习
  16. 【codechef】FN/Fibonacci Number
  17. 训练集(train set),验证集(validation set)和测试集(test set)
  18. 一个简单小技巧实现手机访问.html文件网页效果
  19. 织梦dedecms后台文章搜索关键字,关键字包含文章内容的代码修改
  20. Luogu P4205 [NOI2005]智慧珠游戏

热门文章

  1. 模板—trie图
  2. selenium webdriver 常用断言
  3. UIScrollView的contentSize、contentOffset和contentInset属性
  4. l5-repository基本使用
  5. LINUX系统---初级相关操作和知识
  6. 一个关于vue+mysql+express的全栈项目(二)------ 前端构建
  7. 牛客网暑期ACM多校训练营(第二场)B discount
  8. intent使用Serializable传递对象
  9. IntentService用于服务中开启子线程的自动关闭
  10. COLLECTL LINUX 监控