博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj5192: [Usaco2018 Feb]New Barns
阅读量:4922 次
发布时间:2019-06-11

本文共 1150 字,大约阅读时间需要 3 分钟。

不想写看

#include
#include
#include
#include
#include
#include
using namespace std;int dep[110000];int f[110000][30],Bin[30];int LCA(int x,int y){ if(dep[x]
=0;i--) if(dep[x]-dep[y]>=Bin[i])x=f[x][i]; if(x==y)return x; for(int i=20;i>=0;i--) if(dep[x]>=Bin[i]&&f[x][i]!=f[y][i])x=f[x][i],y=f[y][i]; return f[x][0];}int getdis(int x,int y){ return dep[x]+dep[y]-2*dep[LCA(x,y)];}int d1[110000],d2[110000];int rt[110000];char ss[10];int main(){ Bin[0]=1;for(int i=1;i<=20;i++)Bin[i]=Bin[i-1]*2; int Q,cnt=0,x; scanf("%d",&Q); while(Q--) { scanf("%s%d",ss+1,&x); if(ss[1]=='B') { cnt++; if(x==-1) { rt[cnt]=cnt; d1[cnt]=d2[cnt]=cnt; dep[cnt]=1; } else { rt[cnt]=rt[x]; dep[cnt]=dep[x]+1; f[cnt][0]=x;for(int i=1;Bin[i]<=dep[cnt];i++)f[cnt][i]=f[f[cnt][i-1]][i-1]; int dis=getdis(d1[rt[cnt]],d2[rt[cnt]]); if(getdis(d1[rt[cnt]],cnt)>dis)d2[rt[cnt]]=cnt; if(getdis(d2[rt[cnt]],cnt)>dis)d1[rt[cnt]]=cnt; } } else printf("%d\n",max( getdis(x,d1[rt[x]]),getdis(x,d2[rt[x]]) )); } return 0;}

 

转载于:https://www.cnblogs.com/AKCqhzdy/p/8683031.html

你可能感兴趣的文章
Mecanim动画
查看>>
设计模式(8)--外观模式
查看>>
H5中 input消除默认,取消在手机上的点击高亮效果
查看>>
左移右移置位
查看>>
Codeforces 908 D New Year and Arbitrary Arrangement
查看>>
2019学期第七周编程总结
查看>>
Git 常用命令(转)
查看>>
[转]游戏完成平衡性的技巧
查看>>
架构实例之SpringTest
查看>>
你的跑步姿势正确吗? 教你正确跑步姿势 & 常识
查看>>
(转)Dubbo 简单Dome搭建
查看>>
mybatis在xml文件中处理大于号小于号的方法
查看>>
联想 P70-t 免解锁BL 免rec Magisk Xposed 救砖 ROOT
查看>>
wince扫描功能
查看>>
第四章
查看>>
missing python bz2 module
查看>>
CUDA:Supercomputing for the Masses (用于大量数据的超级计算)-第十节
查看>>
单个单选框radio 点击选中点击取消选中
查看>>
团队冲刺随笔合集—Beta阶段
查看>>
Android ANR的产生与分析
查看>>