LOJ P10130 点的距离 题解
这道题相当于倍增求LCA的板子,我们只要构建一棵树,然后距离就是x的深度+y的深度 - LCA(x,y)的深度;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100005
using namespace std;
int n,Q;
int x,y;
int next[maxn*],first[maxn*],go[maxn*],tot;
int Dep[maxn];
int f[maxn][];
inline int read()
{
int x=;
bool f=;
char c=getchar();
for(; !isdigit(c); c=getchar()) if(c=='-') f=;
for(; isdigit(c); c=getchar()) x=(x<<)+(x<<)+c-'';
if(f) return x;
return -x;
}
inline void add(int u,int v)
{
next[++tot]=first[u];first[u]=tot;go[tot]=v;
next[++tot]=first[v];first[v]=tot;go[tot]=u;
}
inline void Deal_first(int u,int father)
{
Dep[u]=Dep[father]+;
for(int i=;i<=;i++)
{
f[u][i+]=f[f[u][i]][i];
}
for(int e=first[u];e;e=next[e])
{
int v=go[e];
if(v==father)continue;
f[v][]=u;
Deal_first(v,u);
}
}
inline int LCA(int x,int y)
{
if(Dep[x]<Dep[y])swap(x,y);
for(int i=;i>=;i--)
{
if(Dep[f[x][i]]>=Dep[y])x=f[x][i];
if(x==y)return x;
}
for(int i=;i>=;i--)
{
if(f[x][i]!=f[y][i])
{
x=f[x][i];
y=f[y][i];
}
}
return f[x][];
}
inline int dist(int x,int y)
{
return Dep[x]+Dep[y]-*Dep[LCA(x,y)];
}
int main()
{
n=read();
for(int i=;i<n;i++)
{
x=read();y=read();
add(x,y);
}
Deal_first(,);
Q=read();
while(Q--)
{
x=read();y=read();
printf("%d\n",dist(x,y));
}
return ;
}
请各位大佬斧正(反正我不认识斧正是什么意思)
LOJ P10130 点的距离 题解的更多相关文章
- LOJ #10130 点的距离
在LOJ做的第一道题. 最开始想复杂了qwq 想的是在求LCA的过程中统计向上的步数 其实此题很裸--就是求出u,v的LCA, 再分别用两点深度减去LCA的深度,再加起来就好了qwq---化简--- ...
- 洛谷 P4774 / loj 2721 [NOI2018] 屠龙勇士 题解【同余】【exgcd】【CRT】
推导过程存在漏洞+exCRT板子没打熟于是期望得分÷实际得分=∞? 题目描述 小 D 最近在网上发现了一款小游戏.游戏的规则如下: 游戏的目标是按照编号 \(1\sim n\) 顺序杀掉 \(n\ ...
- 洛谷 P3239 / loj 2112 [HNOI2015] 亚瑟王 题解【期望】【DP】
???看不懂的期望DP 题目描述 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚 ...
- 洛谷 P4108 / loj 2119 [HEOI2015] 公约数数列 题解【分块】
看样子分块题应该做的还不够. 题目描述 设计一个数据结构. 给定一个正整数数列 \(a_0, a_1, \ldots , a_{n-1}\),你需要支持以下两种操作: MODIFY id x: 将 \ ...
- 洛谷 P4269 / loj 2041 [SHOI2015] 聚变反应炉 题解【贪心】【DP】
树上游戏..二合一? 题目描述 曾经发明了零件组装机的发明家 SHTSC 又公开了他的新发明:聚变反应炉--一种可以产生大量清洁能量的神秘装置. 众所周知,利用核聚变产生的能量有两个难点:一是控制核聚 ...
- 洛谷 P2136 拉近距离 题解
P2136 拉近距离 题目背景 我是源点,你是终点.我们之间有负权环. --小明 题目描述 在小明和小红的生活中,有N个关键的节点.有M个事件,记为一个三元组(Si,Ti,Wi),表示从节点Si有一个 ...
- POJ2689 [质数距离] 题解
质数距离 题目TP门 题目描述 给定两个整数L和R,你需要在闭区间[L,R]内找到距离最接近的两个相邻质数C1和C2(即C2-C1是最小的),如果存在相同距离的其他相邻质数对,则输出第一对. 同时,你 ...
- LOJ P10004 智力大冲浪 题解
每日一题 day37 打卡 Analysis 经典的带限期和罚款的单位时间任务调度问题 将 val 从大到小排序,优先处理罚款多的,将任务尽量安排在期限之前,并且靠后,如果找不到,则放在最后面 #in ...
- LOJ P10011 愤怒的牛 题解
每日一题 day36 打卡 Analysis 非常水的二分模板,就直接二分答案,用贪心策略check就好了 #include<iostream> #include<cstdio> ...
随机推荐
- Linux基础(06)IO复用
在Windows文件指的就是普通的肉眼可见的文件 , 而Linux一切皆文件 https://blog.csdn.net/nan_nan_nan_nan_nan/article/details/812 ...
- Mars Sample 使用说明
Mars Sample 使用说明 https://github.com/Tencent/mars/wiki/Mars-sample-%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98 ...
- modbus协议使用小记
下载了libmodbus库,交叉编译后运行,总是接收回复时不正确.原因不明. 由于使用到modbus的需求比较简单,所以选择直接拼出modbus的请求报文,然后用串口直接发送和接收的方式, 拼modb ...
- vue 异步渲染
<!DOCTYPE html> <html> <head> <title> hello world vue </title> <met ...
- js utc转当地时间
javascript utc转当地时间 后台传过来的时间:2019-07-03T01:39:51.691242+08:00 转成当地时间:2019-07-02 17:39:51 new Date(20 ...
- 因改漏洞而引申了解的Cookie机制!
近期因为修改漏洞:Appscan扫描漏洞:加密会话(SSL)Cookie中缺少Secure属性,而涉及到Cookie有关的知识,现结合该漏洞的修复过程和了解的cookie知识总结一下. 一.加密会话( ...
- 缓冲区溢出漏洞 ms04011
DSScan使用 扫描目标主机是否存在ms04011漏洞 getos使用 获取操作系统类型 > getos.exe 192.168.1.101 ------------------------- ...
- IVS_技术
视频监控技术按照设备发展过程分为三个阶段:模拟视频监控.数字视频监控.智能视频监控,如下图: 模拟视频监控 第一代视频监控系统也叫做闭路电视监控系统,简称CCTV(Close Circuit Tele ...
- Linux理论小结
1.Linux是什么 2.Linux的种类 3.Linux的软件安装方法 4.Linux的软卸载方法 5.Linux的目录功能 1.Linux是什么 2.Linux的种类 3.Linux的软件安装方法 ...
- 大数据系列文章-Hadoop基础介绍(一)
Hadoop项目背景简介 2003-2004年,Google公开了部分GFS个Mapreduce思想的细节,以此为基础Doug Cutting等人用了2年的业余时间,实现了DFS和Mapreduce机 ...