题目链接

题意

有一棵树,多次询问,每次额外在树上加一条边x,y(这个不会带到下一次询问中),再问两个点a,b能否恰好走k条边到达,边可以反复走。

数据范围

树上节点数≤1e5,询问数≤1e5,k≤1e9树上节点数\le 1e5,询问数\le 1e5,k\le 1e9树上节点数≤1e5,询问数≤1e5,k≤1e9

解法

感觉非常结论。。。推了一下后发现从a走到b要么不走新边,要么从a走到x,要么从a走到y,看起来一共就3种情况,然后就对了

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
inline int read(){char c=getchar();int t=0,f=1;while((!isdigit(c))&&(c!=EOF)){if(c=='-')f=-1;c=getchar();}while((isdigit(c))&&(c!=EOF)){t=(t<<3)+(t<<1)+(c^48);c=getchar();}return t*f;
}
int n;
struct edge{int v,p;
}e[maxn<<1];
int h[maxn],cnt;
inline void add(int a,int b){e[++cnt].p=h[a];e[cnt].v=b;h[a]=cnt;e[++cnt].p=h[b];e[cnt].v=a;h[b]=cnt;
}
int dep[maxn],fa[maxn][20];
void dfs(int u,int f){fa[u][0]=f;dep[u]=dep[f]+1;for(int i=1;fa[u][i-1];i++)fa[u][i]=fa[fa[u][i-1]][i-1];for(int i=h[u];i;i=e[i].p){int v=e[i].v;if(v==f)continue;dfs(v,u);}
}
inline int lca(int a,int b){if(dep[a]>dep[b])swap(a,b);for(int j=19;j>=0;j--){if(dep[a]<=dep[fa[b][j]]){b=fa[b][j];}}if(a==b)return a;for(int j=19;j>=0;j--){if(fa[a][j]!=fa[b][j]){a=fa[a][j];b=fa[b][j];}}return fa[a][0];
}
int main(){//freopen("5.in","r",stdin);//freopen("5.out","w",stdout);n=read();for(int i=1;i<n;i++){int u=read(),v=read();add(u,v);}dfs(1,0);int q=read();while(q--){int x=read(),y=read(),a=read(),b=read(),k=read();int l=lca(a,b);int dis=dep[a]+dep[b]-2*dep[l];if(dis<=k&&((k-dis)%2==0)){puts("YES");continue;}int a1=lca(a,x),a2=lca(a,y),b1=lca(b,x),b2=lca(b,y);int dis1=dep[a]+dep[x]-2*dep[a1]+1+dep[y]+dep[b]-2*dep[b2],dis2=dep[a]+dep[y]-2*dep[a2]+1+dep[x]+dep[b]-2*dep[b1];if(dis1<=k&&((k-dis1)%2==0)){puts("YES");continue;}if(dis2<=k&&((k-dis2)%2==0)){puts("YES");continue;}puts("NO");}return 0;
}

codeforces 1304E相关推荐

  1. CodeForces 375D Tree and Queries

    传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...

  2. 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)

    题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...

  3. 【codeforces 812C】Sagheer and Nubian Market

    [题目链接]:http://codeforces.com/contest/812/problem/C [题意] 给你n个物品; 你可以选购k个物品;则 每个物品有一个基础价值; 然后还有一个附加价值; ...

  4. CodeForces 获得数据

    针对程序的输出可以看见 CodeForces :当输入.输出超过一定字符,会隐藏内容 所以:分若干个程序进行输入数据的获取 1. 1 for (i=1;i<=q;i++) 2 { 3 scanf ...

  5. codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)...

    题目链接:http://www.codeforces.com/problemset/problem/281/A 题意:将一个英文字母的首字母变成大写,然后输出. C++代码: #include < ...

  6. CodeForces 595A

    题目链接: http://codeforces.com/problemset/problem/595/A 题意: 一栋楼,有n层,每层有m户,每户有2个窗户,问这栋楼还有多少户没有睡觉(只要一个窗户灯 ...

  7. codeforces A. Jeff and Digits 解题报告

    题目链接:http://codeforces.com/problemset/problem/352/A 题目意思:给定一个只有0或5组成的序列,你要重新编排这个序列(当然你可以不取尽这些数字),使得这 ...

  8. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  9. Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)

    Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...

最新文章

  1. 项目: 互动粒子仿真
  2. 神经网络激活函数=生物转换器?
  3. 【转载保存】java8新特性学习
  4. linux目录/etc/nc.d/nc.local开机启动项无效
  5. 电容器在电路中的作用
  6. java编辑遗忘曲线代码,java8的新特性 - 天使broken的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. atitit.跨平台gui 概览
  8. 为什么Audition CC2017扫描不了电音插件,你需要这个工具
  9. 论坛介绍 | COSCon'22 开源文化
  10. Word转PDF表格边框横线丢失
  11. 毛毛虫 树形DP
  12. bzoj4565 [Haoi2016]字符合并 (区间DP + 状压DP)
  13. matlab常用逻辑运算
  14. npm ERR! nested aliases not supported 报错原因
  15. 特写 | CVPR十年轶事:走出象牙塔
  16. 服务器磁盘阵列做win7系统,win7 X64 中RIAD0的磁盘阵列怎么组建
  17. UI与Particle穿插混排
  18. WebGl 缩放(矩阵变换)
  19. 专家解读:读研到底值不值(转自中华英才网)
  20. 程序文件分类及编写要求

热门文章

  1. 理解 .NET Core中的Channel篇之一——通道入门
  2. ffmpeg进行多通道语音分离
  3. 进公司一年,怎么跟老板提涨工资?
  4. Spring Cloud第二季--Spring Cloud Bus
  5. Prescan2021.1.0 许可破解报 could not checkout a valid license,cannot initialize the license manager
  6. 鼠标不能动,插上了但没反应
  7. java 取余运算 小数_java - 神奇的取余运算
  8. clickhouse 日期函数无效报错问题处理
  9. 图网络常用数据集总结——Cora, CiteSeer, PubMed, PPI, BlogCatalog, Yelp
  10. 专业性的词典类开放型数据库!