社区讨论
TLE三个点,大佬帮忙优化下
P3379【模板】最近公共祖先(LCA)参与者 6已保存回复 23
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 23 条
- 当前快照
- 1 份
- 快照标识符
- @mi6xj8sv
- 此快照首次捕获于
- 2025/11/20 12:26 4 个月前
- 此快照最后确认于
- 2025/11/20 16:20 4 个月前
这不是标准的LCA做法,大佬们看看这个有救没
CPP#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
vector<int>bian[500010];
vector<int>pos[500010];
bool ru[500010];
void dfs(int a)
{
ru[a]=1;
pos[a].push_back(a);
int m=bian[a].size();
for(int i=0;i<m;i++)
{
int k=bian[a][i];
if(!ru[k])
{
pos[k]=pos[a];
dfs(k);
}
}
bian[a].clear();
}
int lca(int a,int b)
{
int l=0,r=min(pos[a].size(),pos[b].size());
while(l<r)
{
int mid=(l+r+1)>>1;
if(pos[a][mid]==pos[b][mid])
l=mid;
else r=mid-1;
}
return pos[a][l];
}
int main()
{
int a,b,c,d,e;
cin>>a>>b>>c;
for(int i=1;i<a;i++)
{
cin>>d>>e;
bian[d].push_back(e);
bian[e].push_back(d);
}
dfs(c);
while(b--)
{
cin>>d>>e;
cout<<lca(d,e)<<"\n";
}
}
回复
共 23 条回复,欢迎继续交流。
正在加载回复...