---------------------

链接:Miku

---------------------

这一道题只需要在倍增lca的板子上改一改就可以了。

宽度和深度可以在倍增lca的dfs预处理的时候判断一下就可以,至于最后问的两点之间的距离

首先需要求出两点公共祖先的位置,然后计算他们深度的差,并且按照题目要求分别处理即可

--------------------

#include<iostream>
#include<cstdio>
using namespace std;
int head[*];
int p;
int md;
int mk;
int wei[];
struct b{
int to;
int ne;
} e[*];
int fa[*][];
int dep[*];
int n,m,s;
int logg[*];
int x,y;
void dfs(int now,int fat){
dep[now]=dep[fat]+;
md=max(md,dep[now]);
wei[dep[now]]++;
mk=max(mk,wei[dep[now]]);
fa[now][]=fat;
for(int i=;(<<i)<=dep[now];++i){
fa[now][i]=fa[fa[now][i-]][i-];
}
for(int i=head[now];i;i=e[i].ne){
if(e[i].to!=fat)
dfs(e[i].to,now);
}
}
int lca(int x,int y){
int ans=;
if(dep[x]>dep[y]){
int v=dep[y];
ans+=(*(dep[x]-dep[y]));
while(dep[x]>dep[y]){
x=fa[x][logg[dep[x]-dep[y]]-];
}
if(x==y)
return ans;
for(int k=logg[dep[x]]-;k>=;k--){
if(fa[x][k]!=fa[y][k]){
x=fa[x][k];
y=fa[y][k];
}
}
ans+=(*(v-dep[fa[x][]]));
return ans;
}
else{
ans+=(dep[y]-dep[x]);
int v=dep[x];
while(dep[x]<dep[y]){
y=fa[y][logg[dep[y]-dep[x]]-];
}
if(x==y)
return ans;
for(int k=logg[dep[x]]-;k>=;k--){
if(fa[x][k]!=fa[y][k]){
x=fa[x][k];
y=fa[y][k];
}
}
ans+=(*(v-dep[fa[x][]]));
return ans; }
} void add(int f,int t){
p++;
e[p].to=t;
e[p].ne=head[f];
head[f]=p;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n-;++i){
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
dfs(,);
cout<<md<<endl<<mk<<endl;
for(int i=;i<=n;++i)
logg[i]=logg[i-]+(<<logg[i-]==i);
for(int i=;i<=;++i){
scanf("%d%d",&x,&y);
cout<<lca(x,y)<<endl;
}
return ;
}

Ac

P3884 [JLOI2009]二叉树问题的更多相关文章

  1. 洛谷 P3884 [JLOI2009]二叉树问题

    目录 题目 思路 \(Code\) 题目 P3884 [JLOI2009]二叉树问题 思路 深搜统计深度,倍增\(\text{LCA}\)求边数 \(Code\) #include<iostre ...

  2. 【luogu P3884 [JLOI2009]二叉树问题】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3884 对方不想和你说话并向你扔了一个lca模板. #include <cstdio> #incl ...

  3. 【洛谷P3884 [JLOI2009]】二叉树问题

    题目描述 如下图所示的一棵二叉树的深度.宽度及结点间距离分别为: 深度:4 宽度:4(同一层最多结点个数) 结点间距离: ⑧→⑥为8 (3×2+2=8) ⑥→⑦为3 (1×2+1=3) 注:结点间距离 ...

  4. 题解【洛谷P3884】[JLOI2009]二叉树问题

    题面 题解 这道题目可以用很多方法解决,这里我使用的是树链剖分. 关于树链剖分,可以看一下我的树链剖分学习笔记. 大致思路是这样的: 第\(1\)次\(dfs\)记录出每个点的父亲.重儿子.深度.子树 ...

  5. [JLOI2009]二叉树问题

    嘟嘟嘟 对于求深度和宽度都很好维护.深度dfs时维护就行,宽度统计同一个深度的节点有多少个,然后取max. 对于求距离,我刚开始以为是要走到根节点在回来,然后固输了(dep[u] - 1) * 2 + ...

  6. JLOI 2009 二叉树问题

    洛谷 P3884 [JLOI2009]二叉树问题 洛谷传送门 JDOJ 2024: [JLOI2009]二叉树问题 JDOJ传送门 Description 如下图所示的一棵二叉树的深度.宽度及结点间距 ...

  7. 洛谷P3884 二叉树问题

    题目描述 如下图所示的一棵二叉树的深度.宽度及结点间距离分别为: 深度:\(4\) 宽度:\(4\)(同一层最多结点个数) 结点间距离: \(⑧→⑥为8 (3×2+2=8)\) \(⑥→⑦为3 (1× ...

  8. [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法

    二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...

  9. 二叉树的递归实现(java)

    这里演示的二叉树为3层. 递归实现,先构造出一个root节点,先判断左子节点是否为空,为空则构造左子节点,否则进入下一步判断右子节点是否为空,为空则构造右子节点. 利用层数控制迭代次数. 依次递归第二 ...

随机推荐

  1. tcpdump用法说明

    tcpdump采用命令行方式对接口的数据包进行筛选抓取,其丰富特性表现在灵活的表达式上. 不带任何选项的tcpdump,默认会抓取第一个网络接口,且只有将tcpdump进程终止才会停止抓包. 例如: ...

  2. CTF--HTTP服务--暴力破解

    开门见山 1. 扫描靶机ip,发现PCS 192.168.1.103 2. 用nmap扫描靶机开放服务和服务版本 3. 再扫描全部信息 4. 用nikto探测敏感文件 5. 打开敏感网页发掘信息 6. ...

  3. Git详解之分支使用

    前言 几乎每一种版本控制系统都以某种形式支持分支.使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作.在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的完整副本 ...

  4. 理解和运用Java中的Lambda

    前提 回想一下,JDK8是2014年发布正式版的,到现在为(2020-02-08)止已经过去了5年多.JDK8引入的两个比较强大的新特性是Lambda表达式(下文的Lambda特指JDK提供的Lamb ...

  5. 数学建模之优劣解距法(TOPSIS)

    优劣解距法简称TOPSIS,是一种综合评价方法,利用原始数据反映各评价方案之间的差距 优劣解距法的步骤通常为: 先将原始数据针具做正向化处理,得到正向化矩阵 再对正向化矩阵标准化处理以消除各指标纲量的 ...

  6. OS课程 ucore_lab2实验报告

    练习零:填写已有实验    本实验依赖实验1.请把你做的实验1的代码填入本实验中代码中有"LAB1"的注释相应部分.提示:可采用diff和patch工具进行半自动的合并(merge ...

  7. VC实现快递查询

    #include <iostream> #include <string> #include <cstdlib> #include <afxinet.h> ...

  8. 程序为什么开头总是PUSH EBP

    因为对堆栈的操作寄存器有EBP和ESP两个.EBP是堆栈的基址,ESP一直指向栈顶(只要有PUSH动作,ESP就自动减小,栈的生长方向从大往小,不需要手动改变ESP.)所以要压入EBP,然后再用EBP ...

  9. 从数组中找到topK的元素(序号)

    问题: 在n个数中找出最大的k个数. 多次求min()或求max() 最简单的方法是对大小为k的数组进行n次求min计算(或者对大小为n的数组进行k次求max计算)最后能够找出最大k个数.复杂度是O( ...

  10. 推荐一个很棒的开源工作流elsa-core

    开源项目orchard主要开发人员Sipke Schoorstra 开源了一个netcore 工作流项目,地址:https://github.com/elsa-workflows/elsa-core, ...