4281: [ONTAK2015]Związek Harcerstwa Bajtockiego 倍增LCA
2016-02-26 18:50
459 查看
水一水
#include<iostream> #include<cstdio> #define N 1000005 using namespace std; int n,k,now,cnt; int head ,next[N<<1],list[N<<1]; int deep ,fa [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; }
相关文章推荐
- hdu 5512 Pagodas(沈阳区域赛重现)
- Category和Extension的区别
- Django 中间件
- GPS地图坐标转换为其它系列坐标
- 一套关于 Django 的笔试题
- [Mongo] error inserting documents: BSONObj size is invalid (mongoimport mongorestore 数据备份恢复)
- CodeForces 616 D. Longest k-Good Segment(尺取)
- django使用rest_framework
- django book的第一个例子
- Altium Designer AD6 AD9 DXP 制作公司LOGO终极大招,大小随意放置
- golang strconv
- 【转载】Google Analytics 使用图文全攻略
- gomobile 真机 log 打出的日志跟踪
- 原创翻译:James Whittaker系列——Google是如何测试的(3)
- 用goto语句 百钱百鸡。公鸡5元一只,母鸡3元一只,小鸡1元3只。求100元分别能买多少公鸡、母鸡、小鸡。
- golang实现抽象工厂模式
- Django开发常用的模块
- UVA 1623(p256)----Enter the Dragon
- golang实现常用排序算法
- UVa Dragon of Loowater 11292 (贪心)