自己电脑RE,洛谷WA求调
查看原帖
自己电脑RE,洛谷WA求调
974277
水星湖psgqwq楼主2023/11/29 23:23
#include<bits/stdc++.h>
using namespace std;
vector<int>g[500005];
int anc[500005][35],de[500005];
void dfs(int x,int fa)
{
//	cout<<x<<endl;
	de[x] = de[fa]+1;
	anc[x][0] = fa;
	for(int i=1;i<=19;i++)
		anc[x][i] = anc[anc[x][i-1]][i-1];
	for(int e:g[x])
		if(e!=fa)dfs(e,x);
	return;
}
int lca(int x,int y)
{
	if(de[x]<de[y])swap(x,y);
	for(int i=19;i>=0;i--)
		if(de[anc[x][i]]>=de[y])
			x = anc[x][i];
	if(x==y)return x;
	for(int i=19;i>=0;i--)
		if(de[anc[x][i]]!=de[anc[y][i]])
			x = de[anc[x][i]],y = de[anc[y][i]];
	return anc[x][0];
}
int main()
{
	int n,m,s;
	cin>>n>>m>>s;
	for(int i=1;i<n;i++)
	{
		int x,y;
		cin>>x>>y;
		if(x!=y)
		{
			g[y].push_back(x);
			g[x].push_back(y);
		}
	}
	dfs(s,0);
	for(int i=1;i<=m;i++)
	{
		int a,b;
		cout<<lca(a,b)<<endl;
	}
	return 0;
}
2023/11/29 23:23
加载中...