最近公共祖先。

如果$A$到$1$的时间小于$B$到$C$再到$1$的时间,那么一定可以拦截。

如果上述时间相等,需要在到达$1$之前,两者相遇才可以拦截。

#include<bits/stdc++.h>
using namespace std;
int T,n,Q,sz;
int dep[],f[];
int dp[][];
int h[],to[],nx[];
void add(int x,int y)
{
to[sz] = y;
nx[sz] = h[x];
h[x] = sz++;
}
int LCA(int x,int y)
{
if(dep[x]<dep[y]) swap(x,y);
while()
{
if(dep[x]==dep[y]) break;
for(int j=;j>=;j--)
{
int p = dp[x][j];
if(p==-) continue;
if(dep[p]<dep[y]) continue;
x=p;
break;
}
}
if(x==y) return x;
while()
{
if(dp[x][]==dp[y][]) return dp[x][];
for(int j=;j>=;j--)
{
int p = dp[x][j];
int q = dp[y][j];
if(p==q) continue;
x = p;
y = q;
break;
}
}
}
int dis(int x,int y)
{
int t = LCA(x,y);
return dep[x]-dep[t] + dep[y]-dep[t];
}
void dfs(int x,int y,int d)
{
f[x]=; dp[x][] = y; dep[x] = d;
for(int i = h[x];i!=-;i=nx[i])
{
int p = to[i];
if(f[p]) continue;
dfs(p,x,d+);
}
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&Q);
for(int i=;i<=n;i++)
{
f[i]=;
h[i]=-;
}
sz=;
for(int i=;i<=n-;i++)
{
int x,y; scanf("%d%d",&x,&y);
add(x,y); add(y,x);
}
dfs(,-,);
for(int j=;j<=;j++)
for(int i=;i<=n;i++)
{
if(dp[i][j-]==-) dp[i][j]=-;
else dp[i][j] = dp[dp[i][j-]][j-];
}
for(int i=;i<=Q;i++)
{
int A,B,C; scanf("%d%d%d",&A,&B,&C);
int ans=;
int disAC = dis(A,C);
int disBC = dis(B,C);
int disA1 = dep[A]-dep[];
int disC1 = dep[C]-dep[];
if(disAC<=disBC) ans=;
if(disA1<disBC+disC1) ans=;
if(disA1==disBC+disC1&&LCA(A,C)!=) ans=;
if(ans==) printf("YES\n");
else printf("NO\n");
}
}
return ;
}

BNUOJ 52509 Borrow Classroom的更多相关文章

  1. BNUOJ ->Borrow Classroom(LCA)

    B. Borrow Classroom Time Limit: 5000ms Memory Limit: 262144KB 每年的BNU校赛都会有两次赛前培训,为此就需要去借教室,由于SK同学忙于出题 ...

  2. 北京师范大学第十五届ACM决赛-重现赛 B Borrow Classroom (树 ——LCA )

    链接:https://ac.nowcoder.com/acm/contest/3/B 来源:牛客网 Borrow Classroom 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 2 ...

  3. BNUOJ 52325 Increasing or Decreasing 数位dp

    传送门:BNUOJ 52325 Increasing or Decreasing题意:求[l,r]非递增和非递减序列的个数思路:数位dp,dp[pos][pre][status] pos:处理到第几位 ...

  4. bnuoj 24251 Counting Pair

    一道简单的规律题,画出二维表将数字分别相加可以发现很明显的对称性 题目链接:http://www.bnuoj.com/v3/problem_show.php?pid=24251 #include< ...

  5. bnuoj 44359 快来买肉松饼

    http://www.bnuoj.com/contest/problem_show.php?pid=44359 快来买肉松饼 Time Limit: 5000 ms     Case Time Lim ...

  6. BNUOJ 1006 Primary Arithmetic

    Primary Arithmetic 来源:BNUOJ 1006http://www.bnuoj.com/v3/problem_show.php?pid=1006 当你在小学学习算数的时候,老师会教你 ...

  7. bnuoj 34985 Elegant String DP+矩阵快速幂

    题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=34985 We define a kind of strings as elegant s ...

  8. Rust: move和borrow

    感觉Rust官方的学习文档里关于ownship,borrow和lifetime介绍的太简略了,无法真正理解这些语法设计的原因以及如何使用(特别是lifetime).所以找了一些相关的blog来看,总结 ...

  9. bnuoj 25659 A Famous City (单调栈)

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=25659 #include <iostream> #include <stdio.h ...

随机推荐

  1. Arrays.asList方法遇到的问题

    在使用Arrays.asList(T...a)方法时,遇到了 java.lang.UnsupportedOperationException  异常. 后来发现,该方法返回的类型是Arrays$Arr ...

  2. CF835 C 前缀和

    100*100规模上第一象限坐标系上有1e5规模的点,每个点随时间在同一个值域内(最大10)周期递增,但初始值不同,给出一个矩阵和时间询问此时范围内点的值的和. 预处理初始时刻不同权值下的二维前缀和, ...

  3. 响应式布局(Responsive Layout)/流式布局(Fluid Layout)/自适应布局(Adaptive)

    1.使用媒体查询来适应不同视口的固定宽度设计,例如bootstrap的container类. 2.将固定像素布局转换成灵活的百分比布局,才能让页面元素根据视口大小在一个又一个媒体查询间伸缩修正样式. ...

  4. Linux Shell 程序调试

    Linux Shell 程序调试 Shell程序的调试是通过运行程序时加入相关调试选项或在脚本程序中加入相关语句,让shell程序在执行过程中显示出一些可供参考的“调试信息”.当然,用户也可以在she ...

  5. 【CODEVS】1034 家园

    [算法]网络流-最大流(dinic) [题解] 飞船有可承载人数限制,地球为源点,月球为汇点,人像水流一样从以飞船上限为容量的边流向汇点. 人在各站点都面临着上船与否的选择,难以用DP解决最优策略,于 ...

  6. Python :集合类型(set)

    set 是一个无序的元素集合,支持并.交.差及对称差等数学运算, 但由于 set 不记录元素位置,因此不支持索引.分片等序列的操作. 一.初始化 s0 = set() d0 = {} s1 = {0} ...

  7. Laravel 5.4 migrate时报错: Specified key was too long error

    Laravel 5.4默认使用utf8mb4字符编码,而不是之前的utf8编码.因此运行php artisan migrate 会出现如下错误: [Illuminate\Database\QueryE ...

  8. Spring Boot微服务框架的搭建

    (1)spring boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发 ...

  9. 【洛谷 P2472】 [SCOI2007]蜥蜴 (最大流)

    题目链接 简单网络流. 源点向蜥蜴连流量为\(1\)的边. 能跳出去的点向汇点连流量为\(INF\)的边. 把每个点拆成\(2\)个点,\(O(n^4)\)枚举两两点,如果距离小于等于\(d\),就互 ...

  10. 实现字符串检索strstr函数、字符串长度strlen函数、字符串拷贝strcpy函数

    #include <stdio.h> #include <stdlib.h> #include <string.h> /* _Check_return_ _Ret_ ...