暴力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的更多相关文章

  1. P3398 仓鼠找sugar

    P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...

  2. 洛谷 P3398 仓鼠找sugar 解题报告

    P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...

  3. P3398 仓鼠找sugar(树链剖分)

    P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...

  4. 洛谷P3398 仓鼠找sugar [LCA]

    题目传送门 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而 ...

  5. 【洛谷】【lca+结论】P3398 仓鼠找sugar

    [题目描述:] 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而他的基友同时要从他的卧室 ...

  6. luogu P3398 仓鼠找sugar [LCA]

    题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而他的基友同时要从他的卧室(c) ...

  7. 洛谷10月月赛Round.1| P3398 仓鼠找sugar[LCA]

    题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而他的基友同时要从他的卧室(c) ...

  8. 洛谷P3398 仓鼠找sugar

    题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而他的基友同时要从他的卧室(c) ...

  9. P3398 仓鼠找sugar 树上路径相交判断

    \(\color{#0066ff}{题目描述}\) 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐 ...

  10. 洛谷——P3398 仓鼠找sugar

    https://www.luogu.org/problem/show?pid=3398#sub 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴 ...

随机推荐

  1. stream2

    import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.function.B ...

  2. Map集合练习之对字符串中字母出现的次数求和

    不多说,直接上干货! 代码需求 如有这么一个字符串 String str = "fdg+avAdc bs5dDa9c-dfs"; MapTest.java package zhou ...

  3. rman对应format参数说明

    format 的替换变量,注意大小写!   1.     %d --数据库的db_name 2.     %n --数据库的8位长度的db_name,不足部分用“x”后面填充 3.     %N -- ...

  4. hduoj 2955Robberies

    Robberies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  5. SQL语句增删改字段、表、修改默认值

    收集转载: 1.修改字段,默认值 .修改字段默认值 alter table 表名 drop constraint 约束名字 ------说明:删除表的字段的原有约束 alter table 表名 ad ...

  6. C#中实体集合和实体转换成相应的string、XDocument、XElement

    C#中实体集合和实体转换成相应的string.XDocument.XElement public class SimpleXmlConverter { public static string ToX ...

  7. java并发编程 volatile关键字 精准理解

    1.volatile的作用 一个线程共享变量(类的成员变量.类的静态成员变量等)被volatile修饰之后,就具有以下作用: 1)并发中的变量可见性(不同线程对该变量进行操作时的可见性),即一个线程修 ...

  8. SSM环境下配置log4j输出sql和异常到控制台和本地日志文件中

    1.引入日志依赖包 <!--解决Spring使用slf4j输出日志与log4j冲突的问题--> <dependency> <groupId>org.slf4j< ...

  9. java实现一个简单的数学表达式分析器(加减乘除和括号)

    1.使用此分析器需要输入两个量: String str1=运算符号有前后有空格的数学表达式(如 1 + 2 *  ( 3+1)  - 5 #),并在最后添加‘#’字符作为结束标志: String st ...

  10. mybatis返回boolean值时数据库返回null

    Servlet.service() for servlet [springDispatcherServlet] in context with path [/ms] threw exception [ ...