bzoj5192: [Usaco2018 Feb]New Barns
2024-08-31 01:57:34
不想写看zory大佬
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; int dep[];
int f[][],Bin[];
int LCA(int x,int y)
{
if(dep[x]<dep[y])swap(x,y);
for(int i=;i>=;i--)
if(dep[x]-dep[y]>=Bin[i])x=f[x][i];
if(x==y)return x;
for(int i=;i>=;i--)
if(dep[x]>=Bin[i]&&f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];
return f[x][];
}
int getdis(int x,int y)
{
return dep[x]+dep[y]-*dep[LCA(x,y)];
}
int d1[],d2[];
int rt[]; char ss[];
int main()
{
Bin[]=;for(int i=;i<=;i++)Bin[i]=Bin[i-]*; int Q,cnt=,x;
scanf("%d",&Q);
while(Q--)
{
scanf("%s%d",ss+,&x);
if(ss[]=='B')
{
cnt++;
if(x==-)
{
rt[cnt]=cnt;
d1[cnt]=d2[cnt]=cnt;
dep[cnt]=;
}
else
{
rt[cnt]=rt[x];
dep[cnt]=dep[x]+;
f[cnt][]=x;for(int i=;Bin[i]<=dep[cnt];i++)f[cnt][i]=f[f[cnt][i-]][i-];
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 ;
}
最新文章
- ActiveMQ 即时通讯服务 浅析
- SQL TOP 子句、SQL LIKE 操作符、SQL 通配符
- Getaddrinfo()笔记
- caffe的db_lmdb.hpp文件
- Centos7 + Windows7 双系统
- html2canvas 踩坑总结
- office文件在线预览,模仿网易邮箱在线预览的
- js将数字转换成大写的人民币表达式
- win10锁屏壁纸路径
- Levenshtein Distance + LCS 算法计算两个字符串的相似度
- C#中USB转串口的拔插捕获
- 抓包工具Charles基本用法
- node离线版安装
- 从excel表中生成批量SQL,将数据录入到数据库中
- Java进程线程理解
- 问题-DelphiXE10.1 FireDAC联接oracle数据库方法
- linux:用户及文件权限管理
- Zabbix二次开发_02获取数据
- 利用Volatility对Linux内存取证分析-常用命令翻译
- Codeforces766B Mahmoud and a Triangle 2017-02-21 13:47 113人阅读 评论(0) 收藏
热门文章
- ubuntu上Hadoop三种运行模式的部署
- fcc 响应式框架Bootstrap 练习2
- 删除过期备份报错RMAN-06207 RMAN-06208解决方案
- IE9的F12工具,";网络";页签,点击";开始捕获";之后,请求显示的状态是";挂起";的分析和解决
- ASP.NET 缓存(Cache)
- [Windows Server 2012] Filezilla安全加固方法
- MFC CAD控制权问题
- Git环境部署
- NLTK学习笔记(七):文本信息提取
- ganlgia-rrdcached