【P3398]】仓鼠找sugar
暴力lca
题目
有一种情况肯定不行

较深得lca深度比浅的两个点还深,直接不行
如果可能存在解
则解一定是介中情况

较深的lca一定在另一个lca路径上。
判读呢?
就是用深的lca和浅的lca的两个点做lca
做出来的lca是浅的lca。那就是在路径上了
#include<iostream>
#include<cstdio>
using namespace std;
struct node
{
int point;
int nxt;
};
node line[201000];
int head[101000],tail;
int dep[101000];
int st[101000][20];
int log[1010000];
void add(int x,int y)
{
line[++tail].point=y;
line[tail].nxt=head[x];
head[x]=tail;
}
void dfs(int now,int fa)
{
dep[now]=dep[fa]+1;
st[now][0]=fa;
for(int i=1;i<=log[dep[now]];i++)
st[now][i]=st[st[now][i-1]][i-1];
int need=head[now];
while(need!=-1)
{
if(line[need].point!=fa)
dfs(line[need].point,now);
need=line[need].nxt;
}
}
int lca(int x,int y)
{
if(dep[x]<dep[y])
swap(x,y);
for(int i=log[dep[x]];i>=0;i--)
if(dep[st[x][i]]>=dep[y])
x=st[x][i];
if(x!=y)
{
for(int i=log[dep[x]];i>=0;i--)
if(st[x][i]!=st[y][i])
{
x=st[x][i];
y=st[y][i];
}
return st[x][0];
}
return x;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
log[0]=log[1]=0;
for(int i=2;i<=n;i++)
log[i]=log[i>>1]+1;
int a,b,c,d;
for(int i=1;i<=n;i++)
head[i]=-1;
for(int i=1;i<n;i++)
{
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
dfs(1,0);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d%d",&a,&b,&c,&d);
int f1=lca(a,b);
int f2=lca(c,d);
if((dep[f1]>dep[c]&&dep[f1]>dep[d])||(dep[f2]>dep[a]&&dep[f2]>dep[b]))
{
printf("N\n");
continue;
}
else
{
if(dep[f1]>dep[f2])
{
swap(f1,f2);
swap(a,c);
swap(b,d);
}
if(f2==lca(f2,b)||f2==lca(f2,a))
{
printf("Y\n");
continue;
}
printf("N\n");
}
}
}
【P3398]】仓鼠找sugar的更多相关文章
- P3398 仓鼠找sugar
P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...
- 洛谷 P3398 仓鼠找sugar 解题报告
P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...
- P3398 仓鼠找sugar(树链剖分)
P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...
- 洛谷P3398 仓鼠找sugar [LCA]
题目传送门 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...
- 【洛谷】【lca+结论】P3398 仓鼠找sugar
[题目描述:] 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而他的基友同时要从他的卧室 ...
- luogu P3398 仓鼠找sugar [LCA]
题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而他的基友同时要从他的卧室(c) ...
- 洛谷10月月赛Round.1| P3398 仓鼠找sugar[LCA]
题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而他的基友同时要从他的卧室(c) ...
- 洛谷P3398 仓鼠找sugar
题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而他的基友同时要从他的卧室(c) ...
- P3398 仓鼠找sugar 树上路径相交判断
\(\color{#0066ff}{题目描述}\) 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐 ...
- 洛谷——P3398 仓鼠找sugar
https://www.luogu.org/problem/show?pid=3398#sub 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴 ...
随机推荐
- myEclipse更换SVN登录账号
Win10下 找到下面路径删除其下的所有文件 C:\Users\Administrator\AppData\Roaming\Subversion\auth\svn.simple AppData默认隐藏 ...
- sql server 2017安装
下载: 1. 2. 3. 安装步骤: https://www.cnblogs.com/ksguai/p/5869558.html 管理工具: Microsoft SQL Server Manageme ...
- IO流等学习笔记
1.为什么日期的开始是从1970年0101开始记录,计算机的日期记录是现在的时间距1970年的时间,可正可负.? 2.引用类型默认都为null,基本数据类型为0,除基本数据类型外所有的都为引用数据类型 ...
- 输入一个正整数n (1<n<=10),生成 1个 n*n 方阵 求出对角线之和
#define _CRT_SECURE_NO_WARNINGS #include <Windows.h> #include <stdio.h> #include <std ...
- loadrunner如何设置所有虚拟用户只运行一次脚本?
1,设置所有虚拟用户只运行一次脚本 进入场景conroller,如下图设置.初始化和启动Vuser设置都可以,看具体要求,但持续时间一定要选择“完成前一直运行”,这样设置就可以让所有Vuser只运行一 ...
- [转] asp.net core Introducing View Components
本文转自:http://www.c-sharpcorner.com/uploadfile/8c19e8/asp-net-5-getting-started-with-asp-net-mvc-6/ In ...
- Xtrareport 多栏报表
首先看下布局designer 细节: 分组一定要用到GroupHeather 设置好有 右边会出现 接下来是代码部分 Form1中代码 using DevExpress.XtraReports.UI; ...
- output引用类型
1.创建存储过程,将参数avg设置为引用参数,可以对参数有反馈作用 ), @avg float output) as select @avg=AVG(price) from goods where g ...
- poj 1155 输入输出问题
http://acm.hust.edu.cn/vjudge/problem/16417 重做了一遍poj 1155 题目大意:给定一棵树,1为根结点表示电视台,有m个叶子节点表示客户,有n-m-1个中 ...
- 转:用AutoCAD 系统变量编程
Autocad的系统变量, 我们可以通过如下得到: Autodesk.AutoCAD.ApplicationServices.Application.GetSystemVariable(/*MSG0* ...