Description

Input

Output

Sample Input

3 3 1
1 2
2 3
1 2 3
1 1 3
3 1 3

Sample Output

1
1
3

Data Constraint

Hint

样例2、3、4见所附文件

Solution

  • 题目给出一个无根树,于是我们先以 1 位根,将树转成有根树,可以发现这不影响答案。

  • 同时记录点的深度和父亲等信息,用倍增预处理出点的 Lca 信息。

  • 接着,对于一个询问,求出两两之间的 Lca ,分类讨论其摆布情况,通过深度算出答案即可。

  • 特别注意的是分类讨论情况繁琐,切勿漏判,时间复杂度为 O((N+Q) log N)O((N+Q)\ log\ N) 。

Code

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=2e5+1;
int tot;
int first[N],next[N<<1],en[N<<1];
int dep[N],f[N][18];
inline int read()
{int X=0,w=1; char ch=0;while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();return X*w;
}
inline int max(int x,int y)
{return x>y?x:y;
}
inline void insert(int x,int y)
{next[++tot]=first[x];first[x]=tot;en[tot]=y;
}
inline void dfs(int x)
{dep[x]=dep[f[x][0]]+1;for(int i=first[x];i;i=next[i])if(en[i]!=f[x][0]){f[en[i]][0]=x;dfs(en[i]);}
}
inline int lca(int x,int y)
{if(dep[y]>dep[x]) swap(x,y);for(int i=log2(dep[x]);i>=0;i--)if(dep[f[x][i]]>=dep[y]) x=f[x][i];if(x==y) return x;for(int i=log2(dep[x]);i>=0;i--)if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];return f[x][0];
}
int main()
{int n=read(),q=read(),num=read();for(int i=1;i<n;i++){int x=read(),y=read();insert(x,y);insert(y,x);}dfs(1);for(int j=1;j<=17;j++)for(int i=1;i<=n;i++)f[i][j]=f[f[i][j-1]][j-1];while(q--){int a=read(),b=read(),c=read(),ans=0;int ab=lca(a,b),ac=lca(a,c),bc=lca(b,c);if(ab==b){if(dep[ac]<=dep[b]) ans=1; else ans=dep[ac]-dep[b]+1;}elseif(ab==a){if(dep[bc]<=dep[a]) ans=dep[b]-dep[a]+1; else ans=dep[b]-dep[bc]+1;}else{if(ac==a) ans=dep[a]+dep[b]-2*dep[ab]+1; elseif(bc==b) ans=1; elseif(bc==c) ans=dep[b]-max(dep[c],dep[ab])+1; elseif(ac==c){ans=dep[b]-dep[ab]+1;if(dep[c]>dep[ab]) ans+=dep[c]-dep[ab];}elseif(bc==ab && ab==ac) ans=dep[b]-dep[bc]+1; elseif(dep[bc]>dep[ab]) ans=dep[b]-dep[bc]+1; elseif(dep[ac]<dep[ab]){if(dep[ab]>dep[bc]) ans=dep[b]-dep[ab]+1; elseans=dep[ab]+dep[c]-2*dep[ac]+1;}elseif(dep[ac]>=dep[ab]) ans=dep[ac]+dep[b]-2*dep[ab]+1;}printf("%d\n",ans);}return 0;
}

JZOJ 5257. 小X的佛光相关推荐

  1. [前缀和][dp] Jzoj P5873 小p的属性

    Description Input Output Sample Input 2 4 2 1 10 1 2 20 Sample Output 50 Data Constraint 题解 把问题转化一下, ...

  2. #数论#洛谷 3951 JZOJ 5473 小凯的疑惑

    题目大意 用两种面值互质的金币支付商品,面值分别是p.q,问在不找零的情况下最贵的商品的价格是多少? 分析 用一个方程px+qy=n(gcd(p,q)=1)px+qy=n(gcd(p,q)=1)px+ ...

  3. #莫队,分块#codevs 6555 洛谷 1494 jzoj 1902 小Z的袜子

    题目 有多大的概率抽到两只颜色相同的袜子 分析 首先答案=相同袜子的数量/Cnn−1C_n^{n-1}Cnn−1​ 但是纯暴力是会超时的,怎么办呢,用莫队+分块愉快地解决问题,注意特判和最简 代码 # ...

  4. JZOJ 5748 小Y增员操直播群

    传送门 题面 思路 正解 参考代码 时间复杂度 传送门 题面 思路 这道题太 fake 了,打个暴力都能过,丢分居然是因为没有判断重边和自环 QAQ,唉,我太弱啦! 显然我们可以把这些人分成一段一段的 ...

  5. 计蒜客NOIP2017提高组模拟赛(四)day1

    T1:小X的质数 小 X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的情感.小 X 认为,质数是一切自然数起源的地方. 在小 X 的认知里,质数是除了本身和 1 以外,没有其他因数的 ...

  6. 2019.5.25 提高A组 总结

    T1不会,打了一个暴力,不过至少也体现了自己的真实水平,T2推一推就推出来了,T3看出是差分贪心,但不会处理modmodmod的情况 最后得分:40+100+0=140 T1 JZOJ 4786 小a ...

  7. 2018_10_5 模拟赛

    今日比赛 前言 JZOJ 5791 阶乘 题目 分析 代码 JZOJ 5793 小S练跑步 JZOJ 5787 轨道 题目 分析 代码(80分TLE,请自行O2) 后续 前言 和上一次的区别就是,这周 ...

  8. JZOJ 5473. 【NOIP2017提高组正式赛】小凯的疑惑

    Description 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小凯想知道在无法准确支付的物品 ...

  9. JZOJ 3804. 【NOIP2014模拟8.24】小X 的AK 计划

    Description 在小X 的家乡,有机房一条街,街上有很多机房.每个机房里都有一万个人在切题.小X 刚刷完CodeChef,准备出来逛逛. 机房一条街有n 个机房,第i 个机房的坐标为xi,小X ...

最新文章

  1. 2.1/2.2 系统目录结构 2.3 ls命令 2.4 文件类型 2.5 alias命令
  2. python执行代码加key_用Python在注册表运行键中创建新值?
  3. Java基础day20
  4. 【职场】从算法工程师到主管的转变,需要改变的是什么
  5. ISP、主机之间的通信方式、电路交换和分组交换、时延
  6. 数据挖掘中聚类算法概述
  7. 香辣弹簧:不同的自动接线方式
  8. 云服务器zabbix server报错:Lack of free swap on Zabbix server
  9. php5.3 本地调试,php5.3 xdebug 调试器安装配置
  10. 如何避免循环中丑陋的break和continue
  11. python和按键精灵哪个做脚本好_[按键精灵教程]学了这个你也能做出稳定的脚本...
  12. 斐波那契数列(Java递归)
  13. ZMQ专题学习之六:libzmq的订阅代理模式通信方式
  14. 解压文件时,系统找不到指定路径
  15. 1-2、戴尔DELL服务器R730XD配置bios,raid,R720XD安装系统,DELL510配置管理口
  16. 抖音橱窗or抖音小店?这3点,新手开店必看!
  17. JS作用域和自由变量
  18. ecshop 服务器操作系统,ecshop 云服务器
  19. iPhone手机经常有些APP图标前面有个小云朵,点击图标后,进行转圈下载,提示正在载入......
  20. win10设置虚拟内存_电脑配置强,虚拟内存没有用?教你这样设置,瞬间提升流畅度!...

热门文章

  1. 感受野receptive field个人理解
  2. 吴恩达 coursera AI 第三课总结+作业答案
  3. 关于fseek不能定位大于2G文件的问题
  4. CUDA并行算法系列之FFT快速卷积
  5. 淘宝SEO培训视频课程【22讲】
  6. 十七、“秦时山洞汉时水,水长山高不止息。”(2021.5.17)
  7. python封装sql脚本 github_Github 大牛封装 Python 代码,实现自动发送邮件只需三行代码...
  8. 戏说 Windows GDI (2)
  9. asp.net中各种类型文件解析 收藏
  10. 比较两个二维数组是否相等