P3398 仓鼠找 sugar
题意:在一棵树上,给定四个点,在a和b的最短路径中能否在c和d的最短路径中相遇。 思路:可看出题目给了伪标签,不是tarjan的题。一道倍增lca的题。 1.若要满足相遇,则需要a和b的lca在c和d的最短路径上;或者c和d的lca在a和b的最短路径上。 2.在树中,判断一个点是否在一条路径上,可采用距离公式:dep[x]+dep[y]-2*dep[lca(x,y)]
3.满足条件为:DIS(c,x)+DIS(d,x)==DIS(c,d)
,x为a和b的lca。 代码:
#include
#define int long long
#define endl '\n'
#define For(i,a,b) for(i=(a);i=0;i--)
if(fa[u][i]!=fa[v][i])
u=fa[u][i],v=fa[v][i];
return fa[u][0];
}
int DIS(int x,int y)
{
return dep[x]+dep[y]-2*dep[lca(x,y)];
}
bool check(int a,int b,int c,int d)
{
int x=lca(a,b);
if(DIS(c,x)+DIS(d,x)==DIS(c,d))
return 1;
return 0;
}
void solve()
{
cin>>n>>q;
for(int i=1;i>u>>v;
e[u].push_back(v);
e[v].push_back(u);
}
dfs(1,0);
while(q--)
{
int a,b,c,d;
cin>>a>>b>>c>>d;
if(check(a,b,c,d)||check(c,d,a,b))
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?