100分+4个TLE求助!!
查看原帖
100分+4个TLE求助!!
712994
ggcggc楼主2023/8/1 18:17
#include<iostream>
#include<algorithm>
#include<vector>
#define ri register int
using namespace std;
const int N=5e5+100;
int n,m,s;
struct wyx{
	vector<int> childs;
	int fa,d;
}nodes[N];
void dfs(ri rt,ri fa){
	ri to;
	for(ri i=0;i<nodes[rt].childs.size();i++){
		to=nodes[rt].childs[i];
		if(to==fa) continue;
		nodes[to].d=nodes[rt].d+1;
		nodes[to].fa=rt;
		dfs(to,rt);
	}
	return;
}
int LCA(ri u,ri v){
	if(nodes[u].d>nodes[v].d) return LCA(v,u);
	while(nodes[u].d!=nodes[v].d){
		v=nodes[v].fa;
	}
	while(u!=v){
		v=nodes[v].fa;
		u=nodes[u].fa;
	}
	return v;
}
int main(){
	freopen("P3379_1.in","r",stdin);
	freopen("out.out","w",stdout);
	std::ios::sync_with_stdio(false);
	std::cin.tie(NULL);
	cin>>n>>m>>s;
	ri parents,child;
	for(ri i=1;i<=n-1;i++){
		cin>>parents>>child;
		nodes[parents].childs.push_back(child);
		nodes[child].childs.push_back(parents);
	}
	nodes[s].fa=0;nodes[s].d=1;
	dfs(s,0);
	ri u,v;
	for(ri i=1;i<=m;i++){
		cin>>u>>v;
		cout<<LCA(u,v)<<endl;
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}
2023/8/1 18:17
加载中...