博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Luogu P3398 仓鼠找sugar
阅读量:5214 次
发布时间:2019-06-14

本文共 1370 字,大约阅读时间需要 4 分钟。

#include
#include
#include
using namespace std;inline void swap(int &a,int &b){a=a^b;b=a^b;a=a^b;}inline int abs(int x){return x>0?x:-x;}int n,q,a,b,c,d,head[100005],dep[100005],fa[100005][25],cnt;//fa开小了QwQ调了一个小时(YP:把我命调没了) struct edge{ int v,next;}e[500005];inline void add(int u,int v){ e[++cnt].v=v; e[cnt].next=head[u]; head[u]=cnt;}inline void dfs(int u,int fau){ dep[u]=dep[fau]+1; fa[u][0]=fau; for(int i=1;(1<
<=dep[u];i++)fa[u][i]=fa[fa[u][i-1]][i-1]; for(int i=head[u];i!=-1;i=e[i].next){ if(e[i].v!=fau)dfs(e[i].v,u); }}inline int lca(int x,int y){ if(dep[x]
=0;i--) if(dep[x]-dep[y]>=(1<
=0;i--){ if(fa[x][i]!=fa[y][i]){ x=fa[x][i];y=fa[y][i]; } } return fa[y][0];}inline int dis(int x,int y){//这个思路很重要 int u=lca(x,y); return abs(dep[x]-dep[u])+abs(dep[y]-dep[u]);}inline bool on(int a,int x,int y){//这个思路很重要 if(dis(x,a)+dis(a,y)==dis(x,y))return 1; return 0;}int main(){ memset(head,-1,sizeof(head)); scanf("%d%d",&n,&q); for(int i=1;i<=n-1;i++){ int u,v; scanf("%d%d",&u,&v); add(u,v); add(v,u); } dfs(1,0);//这一行没写调了半小时 while(q--){ scanf("%d%d%d%d",&a,&b,&c,&d); int u1=lca(a,b),u2=lca(c,d); if(on(u1,c,d)||on(u2,a,b))printf("Y\n"); else printf("N\n"); }}

转载于:https://www.cnblogs.com/Y15BeTa/p/11324032.html

你可能感兴趣的文章
jquery的contains方法
查看>>
python3--算法基础:二分查找/折半查找
查看>>
Perl IO:随机读写文件
查看>>
Perl IO:IO重定向
查看>>
优化算法系列-模拟退火算法(1)——0-1背包问题
查看>>
转:基于用户投票的排名算法系列
查看>>
WSDL 详解
查看>>
01爬取豆瓣网电影数据进行numpy的练习
查看>>
WSDL测试webservice接口记录
查看>>
独家 | TensorFlow 2.0将把Eager Execution变为默认执行模式,你该转向动态计算图了...
查看>>
react + dva + ant架构后台管理系统(一)
查看>>
[转]ASP数组全集,多维数组和一维数组
查看>>
我的中兴五年:加班为何成了底层员工心中永远的痛
查看>>
git学习
查看>>
C# winform DataGridView 常见属性
查看>>
逻辑运算和while循环.
查看>>
Nhiberate (一)
查看>>
c#后台计算2个日期之间的天数差
查看>>
安卓开发中遇到的小问题
查看>>
ARTS打卡第3周
查看>>