【BZOJ4281】[ONTAK2015]Związek Harcerstwa Bajtockiego LCA
【BZOJ4281】[ONTAK2015]Związek Harcerstwa Bajtockiego
Description
Input
Output
Sample Input
1 2
2 3
3 4
1 1
Sample Output
题解:先倍增求出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相关推荐
- [ONTAK2015]Związek Harcerstwa Bajtockiego
[ONTAK2015]Związek Harcerstwa Bajtockiego 题目大意: 一棵\(n(n\le10^6)\)个点的树,从\(m\)出发,依次执行\(k(k\le10^6)\)条操 ...
- 4281: [ONTAK2015]Związek Harcerstwa Bajtockiego 倍增LCA
水一水 #include<iostream> #include<cstdio> #define N 1000005 using namespace std; int n,k,n ...
- 【hdu5266】pog loves szh III (LCA+线段树)
题意:给一颗树,Q次询问L,L+1,L+2...R的LCA 题目传送门 以LCA为权建线段树,直接查询即可 (我用树剖找LCA) 代码: #include<iostream> #inclu ...
- 【CentOS】利用Kubeadm部署Kubernetes (K8s)
[CentOS]利用Kubeadm部署Kubernetes (K8s)[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体实验流程 1 系统准 ...
- 【Spring】框架简介
[Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...
- 【C#】类——里式转换
类是由面对对象程序设计中产生的,在面向结构的程序设计例如C语言中是没有类这个概念的!C语言中有传值调用和传址调用的两种方式!在c语言中,主方法调用方法,通过传递参数等完成一些操作,其中比较常用的的数据 ...
- 【C#】Out与ref是干什么的?
关于return: 1.最后没有写 return 语句的话,表示程序正常退出 2.不需要返回值时,存在return的作用 例子 void main() {return; //return退出该程序的作 ...
- 【软件工程】RUP与软件开发5大模型
软件开发的5大模型 1.瀑布模型:按照人的思维一步一步的开发下去,如果需求分析得当,每个阶段顺利,结果还不错! 2.快速原型模型:后来人们发现,自己不可能一下子就把所有的需求搞清楚,总是在开发的过程中 ...
- 【VB】学生信息管理系统5——数据库代码
这次学生信息管理系统在代码的理解过程中遇到了一些问题.总结如下: 1. sql server的安装过程各个步骤的意思.在安装SQL Server的时候按照网上的步骤,我觉得这个需要学完整个数据库再返回 ...
最新文章
- double 数组_寻找两个有序数组的中位数
- MVC中使用 事物
- 轻松掌握Redux-Action使用方法
- java可视化插件_java的WindowBuilder可视化插件
- python 脚本_基于Python的ArcGIS脚本编程知识点总结
- C++二分查找,时间复杂度是O(logn)
- c#截取后几位_C#几种截取字符串的方法小结
- 浮动路由与VRRP的概念
- Android性能优化系列---管理你的app内存(一)
- Windows 10 优化
- 跑毒的乌龟-0 : 随机漫步
- 最新个人自动发卡系统7.0网站源码开源
- 培训班作业---作业1:公羊母羊生小羊的问题
- STM32F407使用串口3获取攀腾G7的PM2.5数据
- 中职计算机技术教学计划,中职计算机应用基础教学计划.doc
- -eq、-ne、-gt、-ge、-lt、-le英文意思
- Python伪开发者对于搜狐云景的测评
- 小白学习3D游戏建模从什么软件开始?人物角色建模怎么做?
- 吃货联盟订餐系统Java代码
- Vue 2 中,使用Vite作为前端构建开发工具,替代webpack(一)——vite.config.js配置文件
热门文章
- 140002 《被淹没和被拯救的》——困惑
- 国二c语言作弊用u盘,计算机等级考试可以插u盘吗(全国计算机等级考试报名系统官网)...
- 大学计算机专业表决心,北京工商大学计算机学院
- Beetl开源过程中那些事
- 计算机启动 开机找不到鼠标,电脑开机后黑屏没有鼠标指针怎么解决 电脑开机后黑屏怎么解决...
- Kubernetes 11 (API访问控制、serviceaccount、useraccount、RBAC、PSP安全策略配置)
- QQ技巧一,群发邮件
- 使用Axure制作鲁大师优化页面
- 12306用户数据泄露:有人订票被恶作剧退掉(转)
- 【面经】- 上汽新能源车企JAVA大数据架构师实战面经分享