水一水

#include<iostream>
#include<cstdio>
#define N 1000005
using namespace std;
int n,k,now,cnt;
int head[N],next[N<<1],list[N<<1];
int deep[N],fa[N][21];
inline int read()
{int a=0,f=1; char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();}while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();}return a*f;
}
inline void insert(int x,int y)
{next[++cnt]=head[x];head[x]=cnt;list[cnt]=y;
}
void dfs(int x)
{for (int i=1;(1<<i)<=deep[x];i++)fa[x][i]=fa[fa[x][i-1]][i-1];for (int i=head[x];i;i=next[i])if (list[i]!=fa[x][0]){deep[list[i]]=deep[x]+1;fa[list[i]][0]=x;dfs(list[i]);}
}
inline int lca(int x,int y)
{if (deep[x]<deep[y]) swap(x,y);int t=deep[x]-deep[y];for (int i=0;(1<<i)<=t;i++)if ((1<<i)&t) x=fa[x][i];for (int i=20;~i;i--)if (fa[x][i]!=fa[y][i]) x=fa[x][i],y=fa[y][i];return x==y?x:fa[x][0];
}
inline int skip(int x,int t)
{int now=x;for (int i=0;(1<<i)<=t;i++)if ((1<<i)&t) now=fa[now][i];return now;
}
int main()
{n=read(); now=read(); k=read();for (int i=1;i<n;i++){int u=read(),v=read();insert(u,v); insert(v,u);}dfs(1);for (int i=1;i<=k;i++){int next=read(),step=read(),f=lca(now,next);int d1=deep[now]-deep[f],d2=deep[next]-deep[f];if (step>=d1+d2) now=next;else if (step==d1) now=f;else if (step<d1) now=skip(now,step);else now=skip(next,d2-(step-d1));printf("%d ",now);}return 0;
}   

4281: [ONTAK2015]Związek Harcerstwa Bajtockiego 倍增LCA相关推荐

  1. 【BZOJ4281】[ONTAK2015]Związek Harcerstwa Bajtockiego LCA

    [BZOJ4281][ONTAK2015]Związek Harcerstwa Bajtockiego Description 给定一棵有n个点的无根树,相邻的点之间的距离为1,一开始你位于m点.之后 ...

  2. [ONTAK2015]Związek Harcerstwa Bajtockiego

    [ONTAK2015]Związek Harcerstwa Bajtockiego 题目大意: 一棵\(n(n\le10^6)\)个点的树,从\(m\)出发,依次执行\(k(k\le10^6)\)条操 ...

  3. HDU - 3078 Network 倍增LCA

    倍增lca,把路径上点全部拉出来拍个序输出第k大就过了. 不知道怎么过的,咱也不敢问. #include<stdio.h> #include<string.h> #includ ...

  4. BZOJ 2144 跳跳棋(神仙建模题,倍增 LCA,二分)【BZOJ修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2144 是 hydro 的 BZOJ ...

  5. 洛谷T1967 货车运输 Kruskal最大生成树倍增LCA

    这题的题意是:对于每组x.y,求x到y路径上最小边权的最大值. 于是可以使用最大生成树,因为最大生成树满足性质:生成树中最小边权最大,且任意两点间路径上最小边权最大. 有了树之后,要求路径,那就要考虑 ...

  6. [BZOJ4568][SCOI2016]幸运数字(倍增LCA,点分治+线性基)

    4568: [Scoi2016]幸运数字 Time Limit: 60 Sec  Memory Limit: 256 MB Submit: 2131  Solved: 865 [Submit][Sta ...

  7. NOIP2013 D1T3 货车运输 倍增LCA OR 并查集按秩合并

    思路: Kruskal求最大生成树+倍增LCA // by SiriusRen #include <cstdio> #include <cstring> #include &l ...

  8. 【Codeforces613D】Kingdom and its Cities【虚树】【Tree DP】倍增lca

    http://codeforces.com/problemset/problem/613/D 题意: 给出n个点的树,有q个询问,每次询问给出k个重要的点,问至少删掉多少个非重要的点,使得这个重要的点 ...

  9. 洛谷1967 火车运输 kruskal求最大生成树 倍增LCA维护最小值

    传送门 其实NOIP某些年的第三题也并不是很难嘛... 题目分析: 题目中要求求出某两点之间可以运输的最大重量,也就是这两个点的某条路径上边权最小的边的权值的最大值 很显然,题目中的运输最大重量与选择 ...

最新文章

  1. JavaScript学习系列6 充实文档的内容
  2. MySQL自动备份到本地数据库_MYSQL数据库自动本地/异地双备份/MYSQL增量备份
  3. MySQL 5.6版本GTID复制异常处理一例
  4. 接收不到其他机器发来的报文_大厂真实案例:线上四台机器同一时间全部 OOM......
  5. 好好珍惜今生,不要期待来世……
  6. ntlm java_深讨Java SE 6 在 HTTP 方面的新特性(NTLM)
  7. 相机下载_索尼黑卡相机与手机互联APP相关
  8. 华为android强刷系统下载地址,华为P6S官方rom固件刷机包下载_华为P6S原版系统强刷升级包...
  9. linux中用at命令5分钟后执行,我使用过的Linux命令之at - 在指定时间执行一次任务...
  10. 在JavaScript中实现命名空间 (转载)
  11. 最大数组全局还是局部的问题
  12. 深入理解HTTP协议(转)
  13. chrome 迅雷下载 支持插件, 让chrome支持迅雷
  14. 如何将一个完整项目推到码云_「码云下载项目」如何通过Git将本地项目提交到码云或GitHub...
  15. 5G消息来了,它会干掉微信还是变成另一个飞信?
  16. Hibernate对原生sql处理及结果集和VO的映射
  17. macmini 387 2k显示器尝试hidpi
  18. 鸿蒙之境的称号,神都夜行录鸿蒙之境如何玩 鸿蒙之境阵容选择
  19. 新手从零入手 JQuery 【看这篇】
  20. Python 自动生成快乐源泉小瓶子(智能版)

热门文章

  1. arcgis怎么压缩tif文件_PDF怎么压缩上传?教你轻松实现文件瘦身
  2. 机器学习——子空间学习(PCA LDA)
  3. 计算机运行命令如何关闭应用程序,一键关闭电脑所有程序运行!“Taskkill”命令使用教程...
  4. liunx 之 Ubuntu 网速慢解决方法
  5. 如何加深消费者对产品的印象
  6. edge主页被360,hao123篡改主页问题解决办法2023
  7. 深圳python爬虫培训南山科技园钽电容回收_记一次python 爬虫爬取深圳租房信息的过程及遇到的问题...
  8. java word 写出_【转】java 读写word文档
  9. 阿里巴巴国际版状态在线代码
  10. JAVA SpringBoot 使用 hutool 工具实现发送邮件功能