题目链接:https://www.luogu.org/problemnew/show/P3884

对方不想和你说话并向你扔了一个lca模板。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxlog = 10;
const int maxn = 105;
int n, m, s, widans = -1, depans = -1;
int root;
int fa[maxn][maxlog];
int deep[maxn], wide[maxn];
int head[maxn];
int cnt;
struct Edge{
int next;
int to;
}e[maxn<<2];
void add(int u, int v)
{
e[cnt].to = v;
e[cnt].next = head[u];
head[u] = cnt++;
}
void dfs(int u, int p, int d)
{
fa[u][0] = p;
deep[u] = d;
for(int i = head[u]; i != -1; i = e[i].next)
if(e[i].to != p) dfs(e[i].to, u, d+1);
}
void init()
{
dfs (root, -1, 0);
for(int k = 0; k + 1 < maxlog; k++)
{
for(int v = 1; v <= n; v++)
if(fa[v][k] < 0) fa[v][k+1] = -1;
else fa[v][k+1] = fa[fa[v][k]][k];
}
}
int lca(int u, int v)
{
if(deep[u] > deep[v]) swap(u, v);
for(int k = 0; k < maxlog; k++)
{
if(deep[v] == deep[u]) break;
if((deep[v] - deep[u]) >> k & 1)
{
v = fa[v][k];
}
} if(u == v) return u; for(int k = maxlog - 1; k >= 0; k--)
{
if(fa[v][k] != fa[u][k])
{
u = fa[u][k];
v = fa[v][k];
}
}
return fa[u][0];
}
int main()
{
memset(head,-1,sizeof(head));
int a,b;
scanf("%d",&n);
for(int i = 1; i < n; i++)
{
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
root = 1;
init();
for(int i = 1; i <= n; i++)
{
depans = max(depans, deep[i]);
wide[deep[i]]++;
}
int u, v;
scanf("%d%d",&u,&v);
int p = lca(u,v);
for(int i = 0; i <= depans; i++)
{
widans = max(widans, wide[i]);
}
printf("%d\n%d\n%d",depans+1,widans,2*(deep[u]-deep[p])+deep[v]-deep[p]); return 0;
}

哇我lca是真菜。

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

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

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

  2. 【luogu P1040 加分二叉树】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1040 今天考试考了一个区间DP...没错就是这个... 太蒟了真是连区间DP都不会...看了看题解也看不懂, ...

  3. P3884 [JLOI2009]二叉树问题

    --------------------- 链接:Miku --------------------- 这一道题只需要在倍增lca的板子上改一改就可以了. 宽度和深度可以在倍增lca的dfs预处理的时 ...

  4. CJOJ 1010【NOIP2003】加分二叉树 / Luogu 1040 加分二叉树(树型动态规划)

    CJOJ 1010[NOIP2003]加分二叉树 / Luogu 1040 加分二叉树(树型动态规划) Description 设 一个 n 个节点的二叉树 tree 的中序遍历为( 1,2,3,-, ...

  5. luogu P1126 机器人搬重物 题解

    luogu P1126 机器人搬重物 题解 题目描述 机器人移动学会(\(RMI\))现在正尝试用机器人搬运物品.机器人的形状是一个直径\(1.6\)米的球.在试验阶段,机器人被用于在一个储藏室中搬运 ...

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

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

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

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

  8. 【luogu P2491 [SDOI2011]消防】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2491 题外话: OI一共只有三种题--会的题,不会的题,二分题. 题解: step 1 求树的直径,把树的直 ...

  9. 领扣(LeetCode)对称二叉树 个人题解

    给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3,nul ...

随机推荐

  1. [linux]解决DNS配置重启丢失

    DNS配置重启丢失 每次重启后都修改DNS配置文件 /etc/resolv.conf从网上得知 /etc/resolv.conf中的DNS配置是从/etc/resolvconf/resolv.conf ...

  2. 安恒杯11月月赛web题目-ezsql详细记录

    通过此题目可以学习到 1.通过load_file+like来盲注获取文件内容 2.php魔术方法__get函数的用法 3.bypass  linux命令过滤 题目中给了注册和登录的功能,没有源码泄露 ...

  3. [转] .net core Session , Working with a distributed cache

    本文转自:https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed By Steve Smith+ Di ...

  4. Git连接远程服务器输入密码问题

    当遇到使用Git从远程pull 或者 push代码的时候提示输入密码的时候,毫无疑问SSH Key出问题了! 一.如果只是使用Git Bash,重新生成一下ssh,把新的id_rsa.pub添加到Gi ...

  5. 使用c#正则验证关键字并找出匹配项

    在.net里,使用类Regex可以正则验证一些关键字并取出匹配项. 1.使用Regex.IsMatch(string  input,  string  pattern,  RegexOptions   ...

  6. python的返回值

    1.返回值的作用 函数并非总是直接显示输出,相反,它可以处理一些数据,并返回一个或一组值.函数返回的值被称为返回值.在函数中,可使用return语句将值返回到调用函数的代码行.返回值让你能够将程序的大 ...

  7. 【Spring Cloud】与Spring Boot版本匹配关系

    Spring Cloud版本演进情况如下: 版本名称 版本Finchley snapshot版Edgware snapshot版Dalston SR1 当前最新稳定版本Camden SR7 稳定版本B ...

  8. sublime Error executing: /usr/bin/security dump-trust-settings -d

    sublime text2突然crash,无法简单粗暴的关闭,就开始认真解决这个问题. 问题: 参考文献:https://github.com/wbond/package_control/issues ...

  9. jQuery之设置元素内容(移动和复制元素,使用append(),appendTo()方法)

    jQuery之设置元素内容(移动和复制元素,使用append(),appendTo()方法) ---------- 如果想把内容添加到现有内容末尾,可以利用append()命令.append()命令语 ...

  10. html中通过移除空格的方法来解决浏览器上的留白间距该怎么理解?

    今天在切图的时候,碰到一个兼容性的问题,很幸运最后通过张金鑫老师的文章解决了这个问题!但在阅读张老师文章的时候,我有个地方不明白,在网上查了下也没找到我想要的答案,后来自己想了半天好像是这么回事,现在 ...