题意

给你一棵树,q个询问(x,y,a,b,k),每次问你如果在(x,y)加一条边,那么a到b能不能走k步,同一个点可以走多次

思路(翻译题解)

对于一条a到b的最短路径x,可以通过左右横跳的方法把他扩大成任意的\(x+2i(i\geq 0)\),只要存在一个能使得它等于k的i即可。。

在这一题中,如果x和i连了边,那么就会存在三条可能的最短路径:(从哪到哪都是在原树上)

1.从a到b

2.从a到x,走加的边到y,从y到b

3.从a到y,走加的边到x,从x到b

判断是否存在满足就好了

代码

思路要整理一下树上问题的结构体了。。

int n;
int pre[maxn];
vector<int>g[maxn];
void dfs(int x, int fa, int dp){
pre[x]=dp;
for(int i = 0; i <(int)g[x].size(); i++){
int y = g[x][i];
if(y==fa)continue;
dfs(y,x,dp+1);
}
}
int dep[maxn],fa[maxn][34];
int lg[maxn];
void ddfs(int x, int lst){
dep[x] = dep[lst] + 1;
fa[x][0] = lst;
for(int i = 1; (1<<i) <= dep[x]; i++){
fa[x][i] = fa[fa[x][i-1]][i-1];
}
for(int i = 0; i < (int)g[x].size(); i++){
int y = g[x][i];
if(y==lst) continue;
ddfs(y, x);
}
return;
}
int lca(int x, int y){
if(dep[x] > dep[y])swap(x,y);
while(dep[x] != dep[y]){
if(lg[dep[y]-dep[x]]-1>=0)y = fa[y][lg[dep[y]-dep[x]]-1];
else y = fa[y][0];
}
if(x==y) return x;
for(int i = lg[dep[y]]; i >= 0; i--){
if(fa[x][i] != fa[y][i]){
x = fa[x][i];
y = fa[y][i];
}
}
return fa[x][0];
}
int len(int x ,int y){
return pre[x]+pre[y]-2*pre[lca(x,y)];
}
int f(int x, int a, int b){
int L =lca(a,b);
if(lca(L,x)==L){
return min(len(x,lca(x,a)),len(x,lca(x,b)));
}
else return len(x,L);
}
int main(){ scanf("%d", &n);
for(int i = 1; i <= n; i++){
lg[i] = lg[i-1]+(1<<lg[i-1]==i);
}
for(int i = 1; i < n; i++){
int x,y;
scanf("%d %d" ,&x, &y);
g[x].pb(y);g[y].pb(x);
}
dfs(1,0,0);
ddfs(1,0);
int q;
scanf("%d", &q);
while(q--){
int x,y,a,b,k;
int ok=0;
scanf("%d %d %d %d %d", &x, &y, &a, &b, &k);
if((len(a,x)+len(y,b)+1)%2==k%2&&(len(a,x)+len(y,b)+1)<=k)ok=1;
if((len(a,y)+len(x,b)+1)%2==k%2&&(len(a,y)+len(x,b)+1)<=k)ok=1;
if(len(a,b)%2==k%2&&len(a,b)<=k)ok=1;
if(ok){
printf("YES\n");
}
else printf("NO\n");
}
return 0;
}

Codeforces 1304E 1-Trees and Queries (树上距离+思维)(翻译向)的更多相关文章

  1. 【CF375D】Trees and Queries——树上启发式合并

    (题面不是来自Luogu) 题目描述 有一个大小为n且以1为根的树,树上每个点都有对应的颜色ci.现给出m次询问v, k,问以v为根的子树中有多少种颜色至少出现了k次. 输入格式 第一行两个数n,m表 ...

  2. Codeforces 161.D. Distance in Tree-树分治(点分治,不容斥版)-树上距离为K的点对数量-蜜汁TLE (VK Cup 2012 Round 1)

    D. Distance in Tree time limit per test 3 seconds memory limit per test 512 megabytes input standard ...

  3. POJ1741--Tree (树的点分治) 求树上距离小于等于k的点对数

    Tree Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 12276   Accepted: 3886 Description ...

  4. Codechef Dynamic Trees and Queries

    Home » Practice(Hard) » Dynamic Trees and Queries Problem Code: ANUDTQSubmit https://www.codechef.co ...

  5. 洛谷 P3806 【模板】点分治1-树分治(点分治,容斥版) 模板题-树上距离为k的点对是否存在

    P3806 [模板]点分治1 题目背景 感谢hzwer的点分治互测. 题目描述 给定一棵有n个点的树 询问树上距离为k的点对是否存在. 输入格式 n,m 接下来n-1条边a,b,c描述a到b有一条长度 ...

  6. P3806 离线多次询问 树上距离为K的点对是否存在 点分治

    询问树上距离为k的点对是否存在 直接n^2暴力处理点对 桶排记录 可以过 #include<cstdio> #include<cstring> #include<algo ...

  7. Codeforces 1304E. 1-Trees and Queries 代码(LCA 树上两点距离判奇偶)

    https://codeforces.com/contest/1304/problem/E #include<bits/stdc++.h> using namespace std; typ ...

  8. Codeforces 1304E. 1-Trees and Queries

    简述题意,给你一课最小支撑树,对每个询问,在原有的路径上增加x-y,问a-b是否有路径长度为k的路,每条路每个点可以重复使用 由于是最小支撑树,我们可以用LCA来快速判断每个点之间的距离,那么现在就要 ...

  9. 【非原创】codeforces 1060E Sergey and Subway 【树上任意两点距离和】

    学习博客:戳这里 本人代码: 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 con ...

随机推荐

  1. 17.python自定义模块的导入方式

    1.直接用import导入 最后运行main.py可以看到命令行窗口输出了一句:你好,这样就完成了. 2.通过sys模块导入自定义模块的路径path 3.在环境变量中找到自定义模块 这个方法原理就是利 ...

  2. 11.在Chrome谷歌浏览器中安装插件XPath Helper的方法

    1.首先在以下链接下载XPath Helper插件,链接:https://pan.baidu.com/s/1Ng7HAGgsVfOyqy6dn094Jg 提取码:a1dv 2.插件下载完成后解压,然后 ...

  3. [Debug]IOS微信浏览器不支持form表单的target=_blank

    测试代码如下 <?php echo '<meta name="viewport" content="width=device-width,minimum-sc ...

  4. 【Javascript函数】节流throttle和间隔控制dbounce

    一.throttle 函数节流,指把很小时间内触发的N多事件,节流成1个事件. 我们这里说的throttle就是函数节流的意思.再说的通俗一点就是函数调用的频度控制器,是连续执行时间间隔控制.主要应用 ...

  5. 【一起学源码-微服务】Hystrix 源码三:Hystrix核心流程:Hystix降级、熔断等原理剖析

    说明 原创不易,如若转载 请标明来源! 欢迎关注本人微信公众号:壹枝花算不算浪漫 更多内容也可查看本人博客:一枝花算不算浪漫 前言 前情回顾 上一讲我们讲解了Hystrix在配合feign的过程中,一 ...

  6. 第一篇:python中的判断语句和循环

    python与C语言的代码格式区别: 需注意:1.python中语句结束没有分号 “;” 2.python中严格要求缩进,且在判断和循环等语句中把括号用冒号代替. 3.经常使用tab键进行缩进. 4. ...

  7. 小白学Java:迭代器原来是这么回事

    目录 小白学Java:迭代器原来是这么回事 迭代器概述 迭代器设计模式 Iterator定义的方法 迭代器:统一方式 Iterator的总结 小白学Java:迭代器原来是这么回事 前文传送门:Enum ...

  8. 《【面试突击】— Redis篇》-- Redis哨兵原理及持久化机制

    能坚持别人不能坚持的,才能拥有别人未曾拥有的.关注编程大道公众号,让我们一同坚持心中所想,一起成长!! <[面试突击]— Redis篇>-- Redis哨兵原理及持久化机制 在这个系列里, ...

  9. SPSS 相关性的选择

    在SPSS中导入数据,analyze-correlate-bivariate-选择变量 OK 输出的是相关系数矩阵 相关系数下面的Sig.是显著性检验结果的P值,越接近0越显著. 同样的数据,我们接着 ...

  10. http请求头中的content-type属性

    在HTTP请求中,我们每天都在使用Content-Type来指定不同格式的请求信息,但是却很少有人去全面了解Content-Type中允许的值有多少,因此这里来了解一下Content-Type的可用值 ...