【BZOJ4281】[ONTAK2015]Związek Harcerstwa Bajtockiego

Description

给定一棵有n个点的无根树,相邻的点之间的距离为1,一开始你位于m点。之后你将依次收到k个指令,每个指令包含两个整数d和t,你需要沿着最短路在t步之内(包含t步)走到d点,如果不能走到,则停在最后到达的那个点。请在每个指令之后输出你所在的位置。

Input

第一行包含三个正整数n,m,k(1<=m<=n<=1000000,1<=k<=1000000)。
接下来n-1行,每行包含两个正整数x,y(1<=x,y<=n),描述一条树边。
接下来k行,每行两个整数d,t(1<=d<=n,0<=t<=10^9),描述一条指令。

Output

输出一行,包含k个正整数,即执行每条指令后你所在的位置。

Sample Input

3 1 2
1 2
2 3
3 4
1 1

Sample Output

3 2

题解:先倍增求出LCA,判断能否走到,然后倍增模拟走的过程即可。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn=1000010;
int n,m,S,mx,cnt;
int to[maxn<<1],next[maxn<<1],head[maxn],fa[21][maxn],dep[maxn];inline int rd()
{int ret=0,f=1;   char gc=getchar();while(gc<'0'||gc>'9')  {if(gc=='-')f=-f;  gc=getchar();}while(gc>='0'&&gc<='9')  ret=ret*10+gc-'0',gc=getchar();return ret*f;
}
void add(int a,int b)
{to[cnt]=b,next[cnt]=head[a],head[a]=cnt++;
}
void dfs(int x)
{for(int i=head[x];i!=-1;i=next[i])  if(to[i]!=fa[0][x])fa[0][to[i]]=x,dep[to[i]]=dep[x]+1,dfs(to[i]);
}
int lca(int a,int b)
{if(dep[a]<dep[b])   swap(a,b);for(int i=mx;i>=0;i--)   if(dep[fa[i][a]]>=dep[b])   a=fa[i][a];if(a==b)  return a;for(int i=mx;i>=0;i--)    if(fa[i][a]!=fa[i][b]) a=fa[i][a],b=fa[i][b];return fa[0][a];
}
int find(int x,int y)
{for(int i=mx;i>=0;i--)    if(y&(1<<i))  x=fa[i][x];return x;
}
int main()
{n=rd(),S=rd(),m=rd();int i,a,b,c;memset(head,-1,sizeof(head));for(i=1;i<n;i++)    a=rd(),b=rd(),add(a,b),add(b,a);dep[1]=1,dfs(1);for(mx=1;(1<<mx)<=n;mx++)for(i=1;i<=n;i++)   fa[mx][i]=fa[mx-1][fa[mx-1][i]];mx--;for(i=1;i<=m;i++){a=rd(),b=rd(),c=lca(S,a);if(dep[S]+dep[a]-2*dep[c]<=b)   S=a;else{if(dep[S]-dep[c]>=b)  S=find(S,b);else   S=find(a,dep[S]+dep[a]-2*dep[c]-b);}printf("%d",S);if(i<m)   printf(" ");}return 0;
}//3 1 2 1 2 2 3 3 4 1 1

转载于:https://www.cnblogs.com/CQzhangyu/p/7434656.html

【BZOJ4281】[ONTAK2015]Związek Harcerstwa Bajtockiego LCA相关推荐

  1. [ONTAK2015]Związek Harcerstwa Bajtockiego

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

  2. 4281: [ONTAK2015]Związek Harcerstwa Bajtockiego 倍增LCA

    水一水 #include<iostream> #include<cstdio> #define N 1000005 using namespace std; int n,k,n ...

  3. 【hdu5266】pog loves szh III (LCA+线段树)

    题意:给一颗树,Q次询问L,L+1,L+2...R的LCA 题目传送门 以LCA为权建线段树,直接查询即可 (我用树剖找LCA) 代码: #include<iostream> #inclu ...

  4. 【CentOS】利用Kubeadm部署Kubernetes (K8s)

    [CentOS]利用Kubeadm部署Kubernetes (K8s)[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体实验流程 1 系统准 ...

  5. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  6. 【C#】类——里式转换

    类是由面对对象程序设计中产生的,在面向结构的程序设计例如C语言中是没有类这个概念的!C语言中有传值调用和传址调用的两种方式!在c语言中,主方法调用方法,通过传递参数等完成一些操作,其中比较常用的的数据 ...

  7. 【C#】Out与ref是干什么的?

    关于return: 1.最后没有写 return 语句的话,表示程序正常退出 2.不需要返回值时,存在return的作用 例子 void main() {return; //return退出该程序的作 ...

  8. 【软件工程】RUP与软件开发5大模型

    软件开发的5大模型 1.瀑布模型:按照人的思维一步一步的开发下去,如果需求分析得当,每个阶段顺利,结果还不错! 2.快速原型模型:后来人们发现,自己不可能一下子就把所有的需求搞清楚,总是在开发的过程中 ...

  9. 【VB】学生信息管理系统5——数据库代码

    这次学生信息管理系统在代码的理解过程中遇到了一些问题.总结如下: 1. sql server的安装过程各个步骤的意思.在安装SQL Server的时候按照网上的步骤,我觉得这个需要学完整个数据库再返回 ...

最新文章

  1. double 数组_寻找两个有序数组的中位数
  2. MVC中使用 事物
  3. 轻松掌握Redux-Action使用方法
  4. java可视化插件_java的WindowBuilder可视化插件
  5. python 脚本_基于Python的ArcGIS脚本编程知识点总结
  6. C++二分查找,时间复杂度是O(logn)
  7. c#截取后几位_C#几种截取字符串的方法小结
  8. 浮动路由与VRRP的概念
  9. Android性能优化系列---管理你的app内存(一)
  10. Windows 10 优化
  11. 跑毒的乌龟-0 : 随机漫步
  12. 最新个人自动发卡系统7.0网站源码开源
  13. 培训班作业---作业1:公羊母羊生小羊的问题
  14. STM32F407使用串口3获取攀腾G7的PM2.5数据
  15. 中职计算机技术教学计划,中职计算机应用基础教学计划.doc
  16. -eq、-ne、-gt、-ge、-lt、-le英文意思
  17. Python伪开发者对于搜狐云景的测评
  18. 小白学习3D游戏建模从什么软件开始?人物角色建模怎么做?
  19. 吃货联盟订餐系统Java代码
  20. Vue 2 中,使用Vite作为前端构建开发工具,替代webpack(一)——vite.config.js配置文件

热门文章

  1. 140002 《被淹没和被拯救的》——困惑
  2. 国二c语言作弊用u盘,计算机等级考试可以插u盘吗(全国计算机等级考试报名系统官网)...
  3. 大学计算机专业表决心,北京工商大学计算机学院
  4. Beetl开源过程中那些事
  5. 计算机启动 开机找不到鼠标,电脑开机后黑屏没有鼠标指针怎么解决 电脑开机后黑屏怎么解决...
  6. Kubernetes 11 (API访问控制、serviceaccount、useraccount、RBAC、PSP安全策略配置)
  7. QQ技巧一,群发邮件
  8. 使用Axure制作鲁大师优化页面
  9. 12306用户数据泄露:有人订票被恶作剧退掉(转)
  10. 【面经】- 上汽新能源车企JAVA大数据架构师实战面经分享