不知道哪里错了,求助
查看原帖
不知道哪里错了,求助
749959
the_night楼主2022/10/31 22:22
#include <bits/stdc++.h>
using namespace std;
#define N 500001
int n,m,s;
struct list{
	int to[N],nxt[N],head[N],tot;
	void add(int a,int b){
		to[++tot]=b;
		nxt[tot]=head[a];
		head[a]=tot;
	}
}G;
int cnt=0,pos[N],dep[N],seq[N],vis[N];
void dfs(int u,int d){
	seq[++cnt]=u;
	pos[u]=cnt;
	dep[cnt]=d;
	vis[u]=1;
	for(int i=G.head[u];i;i=G.nxt[i]){
		int v=G.to[i];
		if(vis[v]) continue;
		dfs(v,d+1);
		seq[++cnt]=u;
		dep[cnt]=d;
	}
}
int lg[N];
void log_find(){
	lg[0]=-1;
	for(int i=1;i<=cnt;i++){
		lg[i]=(i&(i-1))?lg[i-1]:lg[i-1]+1;
	}
}
int f[20][N];
void ST_create(){
	for(int i=1;i<=cnt;i++){
		f[0][i]=i;
	}
	int k=lg[cnt];
	for(int j=1;j<=k;j++){
		for(int i=1;i<=cnt-(1<<j)+1;i++){
			f[j][i]=(dep[f[j-1][i]])<dep[f[j-1][i+(1<<(j-1))]]?f[j-1][i]:f[j-1][i+(1<<(j-1))];
		}
	}
}
int RMQ_query(int l,int r){
	int k=lg[r-l+1];
	return (dep[f[k][l]]<dep[f[k][r-(1<<k)+1]])?f[k][l]:f[k][r-(1<<k)+1];
}
int LCA(int u,int v){
	int l=pos[u],r=pos[v];
	if(l>r) swap(l,r);
	return seq[RMQ_query(l,r)];
}
int main(){
	cin>>n>>m>>s;
	for(int i=1,u,v;i<n;i++){
		cin>>u>>v;
		G.add(u,v);
		G.add(v,u);
	}
	dfs(s,1);
	ST_create();
	for(int i=1,u,v;i<=m;i++){
		cin>>u>>v;
		cout<<LCA(u,v)<<endl;
	}
	
	
	return 0;
} 
2022/10/31 22:22
加载中...