cf519E
多组询问,问到树上两个点x,y距离相等的点的个数。
倍增求lca.
//Twenty
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<vector>
#include<ctime>
const int maxn=1e5+;
typedef long long LL;
using namespace std;
int n,m,ecnt,fir[maxn],nxt[maxn<<],to[maxn<<],f[maxn][],R[maxn],sz[maxn];;
void add(int u,int v) {
nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v;
nxt[++ecnt]=fir[v]; fir[v]=ecnt; to[ecnt]=u;
}
void dfs(int x,int fa) {
R[x]=R[fa]+;
f[x][]=fa;
sz[x]=;
for(int i=fir[x];i;i=nxt[i]) if(to[i]!=fa) {
dfs(to[i],x);
sz[x]+=sz[to[i]];
}
}
void make_st() {
for(int i=;i<=;i++)
for(int j=;j<=n;j++)
f[j][i]=f[f[j][i-]][i-];
}
int lca(int x,int y) {
if(R[x]<R[y]) swap(x,y);
for(int i=;i>=;i--)
if(R[f[x][i]]>=R[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][];
}
int cal(int x,int y) {
if(x==y) return sz[];
int z=lca(x,y);
if(R[x]==R[y]) {
for(int i=;i>=;i--)
if(f[x][i]!=f[y][i]) {
x=f[x][i];
y=f[y][i];
}
return sz[]-sz[x]-sz[y];
}
int l=R[x]-R[z]+R[y]-R[z];
if(l&) return ; l>>=;
if(R[x]<R[y]) swap(x,y);
l=R[x]-R[z]-l+;
for(int i=;i>=;i--)
if(R[f[x][i]]&&R[f[x][i]]-R[z]>=l)
x=f[x][i];
return sz[f[x][]]-sz[x];
}
int main()
{
scanf("%d",&n);
for(int i=;i<n;i++) {
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
}
dfs(,);
make_st();
scanf("%d",&m);
for(int i=;i<=m;i++) {
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",cal(x,y));
}
return ;
}
cf519E的更多相关文章
- CF519E A and B and Lecture Rooms
最近很颓……难题想不动……水题写不对,NOIP怕是
随机推荐
- day31 类的组合及继承,文件目录规范
Python之路,Day18 = Python基础18-面向对象继承与组合 类的继承 def talk(): print("I am come from talk..a") cla ...
- thinkphp url生成
为了配合所使用的URL模式,我们需要能够动态的根据当前的URL设置生成对应的URL地址,为此,ThinkPHP内置提供了U方法,用于URL的动态生成,可以确保项目在移植过程中不受环境的影响. 定义规则 ...
- Duilib中各个类的简单介绍
DirectUI意为直接在父窗口上绘图(Paint on parent dc directly).即子窗口不以窗口句柄的形式创建(windowless),只是逻辑上的窗口,绘制在父窗口之上.微软的“D ...
- js 过滤非法字符
demo = 'zhang#@$san'; reg=/[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/im; if(reg.test(demo)){ t ...
- Objective-C 中的 Meta-class 是什么?
在这篇文章中,我关注的是 Objective-C 中的一个陌生的概念-- meta-class.在 Objective-C 中的每个类都有一个相关联的 meta-class,但是你很少会直接使用 me ...
- 线程池_ThreadPool
using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; ...
- UVA-11987-Almost Union-Find-并查集的基本操作合并、删除、移位
I hope you know the beautiful Union-Find structure. In this problem, you’re to implement something s ...
- 新增加的html里的标签元素,该元素作为事件,js获取不到id的问题
if(flag==0){ var p = document.createElement("p"); var text ...
- 华为-eNSP模拟器路由器无法正常启动一直显示“#”
问题项如截图: 解决方案: 1. 打开自己电脑的控制面板 -->> 系统和安全 -->> Windows Defender防火墙 (运行应用通过Windows防火墙) 2 .找 ...
- SpringCloud学习笔记《---03 Ribbon---》基础篇