[CF1304E] 1-Trees and Queries - LCA

由于可以走重边,所以任意一条路径长 + 2 仍然对应至少一条合法路径
很显然我们有 \(3\) 种基本路径
- 不经过 \((x,y)\) 
- 经过 \(x \to y\) 
- 经过 \(y \to x\) 
假设某个基本路径的答案是 \(d\),询问是 \(k\),如果同时满足以下条件,则该基本路径可以作为答案
- \(d \leq k\) 
- \(d = k \ (mod \ 2)\) 
于是暴力做即可
#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
vector <int> g[N];
int n,t1,t2,q,x,y,a,b,k,fa[N][20],dep[N];
void dfs(int p,int fr) {
    for(int q:g[p]) if(q!=fr) {
        fa[q][0]=p;
        dep[q]=dep[p]+1;
        dfs(q,p);
    }
}
int lca(int p,int q) {
    if(dep[p]<dep[q]) swap(p,q);
    for(int i=17;i>=0;--i) if(dep[fa[p][i]]>=dep[q]) p=fa[p][i];
    for(int i=17;i>=0;--i) if(fa[p][i]-fa[q][i]) p=fa[p][i],q=fa[q][i];
    if(p-q) return fa[p][0];
    return p;
}
int dis(int p,int q) {
    return dep[p]+dep[q]-2*dep[lca(p,q)];
}
signed main() {
    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<n;i++) {
        cin>>t1>>t2;
        g[t1].push_back(t2);
        g[t2].push_back(t1);
    }
    dep[1]=1;
    dfs(1,0);
    for(int i=1;i<=17;i++) {
        for(int j=1;j<=n;j++) {
            fa[j][i]=fa[fa[j][i-1]][i-1];
        }
    }
    cin>>q;
    for(int i=1;i<=q;i++) {
        cin>>x>>y>>a>>b>>k;
        int d;
        d=dis(a,b);
        if(d<=k && (d%2)==(k%2)) {puts("YES"); continue;}
        d=dis(a,x)+1+dis(y,b);
        if(d<=k && (d%2)==(k%2)) {puts("YES"); continue;}
        d=dis(a,y)+1+dis(x,b);
        if(d<=k && (d%2)==(k%2)) {puts("YES"); continue;}
        puts("NO");
    }
}
[CF1304E] 1-Trees and Queries - LCA的更多相关文章
- POJ.1986 Distance Queries ( LCA 倍增 )
		POJ.1986 Distance Queries ( LCA 倍增 ) 题意分析 给出一个N个点,M条边的信息(u,v,w),表示树上u-v有一条边,边权为w,接下来有k个询问,每个询问为(a,b) ... 
- Codechef  Dynamic Trees and Queries
		Home » Practice(Hard) » Dynamic Trees and Queries Problem Code: ANUDTQSubmit https://www.codechef.co ... 
- poj 1986 Distance Queries  LCA
		题目链接:http://poj.org/problem?id=1986 Farmer John's cows refused to run in his marathon since he chose ... 
- POJ 1986 Distance Queries(LCA Tarjan法)
		Distance Queries [题目链接]Distance Queries [题目类型]LCA Tarjan法 &题意: 输入n和m,表示n个点m条边,下面m行是边的信息,两端点和权,后面 ... 
- POJ 1986 - Distance Queries - [LCA模板题][Tarjan-LCA算法]
		题目链接:http://poj.org/problem?id=1986 Description Farmer John's cows refused to run in his marathon si ... 
- poj-1986 Distance Queries(lca+ST+dfs)
		题目链接: Distance Queries Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 11531 Accepted ... 
- POJ 1986 Distance Queries LCA两点距离树
		标题来源:POJ 1986 Distance Queries 意甲冠军:给你一棵树 q第二次查询 每次你问两个点之间的距离 思路:对于2点 u v dis(u,v) = dis(root,u) + d ... 
- [poj1986]Distance Queries(LCA)
		解题关键:LCA模板题 复杂度:$O(n\log n)$ #pragma comment(linker, "/STACK:1024000000,1024000000") #incl ... 
- 题解 CF1304E 【1-Trees and Queries】
		前言 这场比赛,在最后 \(5\) 分钟,我想到了这道题的 \(Idea\),但是,没有打完,比赛就结束了. 正文 题目意思 这道题目的意思就是说,一棵树上每次给 \(x\) 和 \(y\) 节点连 ... 
随机推荐
- .net代码实现上千次ping的实现
			先上代码: 多线程实现ping校验: public void PingCameraNew(List<CameraMongoDto> assetlist) { ThreadPool.SetM ... 
- StarUML之九、starUML的一些特殊属性的说明
			UML的扩充性机制允许你在控制的方式下扩充UML语言. 这一类的机制包括:stereotype,标记值.约束. Stereotype扩充了UML的词汇表,允许你创建新的建筑块,这些建筑块从已有的继承而 ... 
- JS常见的表单验证,H5自带的验证和正则表达式的验证
			H5验证 自带的验证无法满足需求: <form action="" method="get"> name:<input type=" ... 
- Girlfreind:1 Vulnhub Walkthrough
			靶机链接: https://www.vulnhub.com/entry/me-and-my-girlfriend-1,409/ 主机扫描: HTTP 目录访问,提示无权限,右键源码,提示XXF即可 正 ... 
- 出现ImportError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly ....的解决方法
			在terminal上运行gluoncv时遇到了一个报错问题. ImportError: Python is not installed as a framework. The Mac OS X bac ... 
- .net core 3.0+unit of work (一)
			1.先将unit of work源码下载 2.引入自己的项目 3.根据原始项目示意在自己项目的startup里注册仓储 由于我不想对每个实体都注册一遍,我使用了泛型仓储(core 2.0好像不支持) ... 
- CSS操作
			CSS 与 JavaScript 是两个有着明确分工的领域,前者负责页面的视觉效果,后者负责与用户的行为互动.但是,它们毕竟同属网页开发的前端,因此不可避免有着交叉和互相配合. 1. 使用JavaSc ... 
- ROS之usb_cam
			source devel/setup.*sh roslaunch usb_cam usb_cam-test.launch rqt_graph查看动态消息图 当我们把鼠标放在/usb_cam/image ... 
- 洛谷P1464 Function  HDU P1579 Function Run Fun
			洛谷P1464 Function HDU P1579 Function Run Fun 题目描述 对于一个递归函数w(a,b,c) 如果a≤0 or b≤0 or c≤0就返回值11. 如果a> ... 
- Vue中富文本编辑器(vue-quill-editor)的使用
			1. 安装 npm install vue-quill-editor --save 2. 导入并挂载 import VueQuillEditor from 'vue-quill-editor' // ... 
