求助!!!
查看原帖
求助!!!
374769
Epi4any楼主2022/3/18 11:40

样例输出

4
0
1
0
4

我们老师给我调样例调自闭了

求助万能谷民qwq

#include<iostream>
#define N 500005
using namespace std;

struct tree{
	int v,next;
}t[N*2];

int n,m,s;
int cnt,h[N],d[N],p[N][20];

inline int read() {
	int x = 0, f = 1;
	char ch = getchar();
	while (ch < '0' || ch > '9') {
		if (ch == '-') f = -1;
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9') {
		x = (x << 1) + (x << 3) + (ch ^ 48);
		ch = getchar();
	}
	return x * f;
}

inline void addedge(int u,int v){
	t[++cnt].v=v;
	t[cnt].next=h[u];
	h[u]=cnt;
}

void dfs(int u,int fa){
	d[u]=d[fa]+1;
	p[u][0]=fa;
	for(int i=1; (1<<(i-1))<=d[u];i++){
		p[u][i]=p[p[u][i-1]][i-1];
	}
	for(int i=h[u];i;i=t[i].next){
		if(t[i].v!=fa) dfs(t[i].v,u);
	}
}

int lca(int u,int v){
	if(d[u]<d[v]) swap(u,v);
	for(int i=20;i>=0;i--){
		if(d[p[u][i]]>=d[v]) u=p[u][i];
	}
	if(u==v) return u;
	for(int i=20;i>=0;i--){
		if(p[u][i]!=p[v][i]) u=p[u][i],v=p[v][i];
	}
	return p[u][0];
}

int main(){
	cin>>n>>m>>s;
	for(int i=1,u,v;i<n;i++){
		u=read(),v=read();
		addedge(u,v);
		addedge(v,u);
	}
	
	dfs(s,0);
	
	for(int i=1,u,v;i<=m;i++){
		u=read(),v=read();
		printf("%d\n",lca(u,v));
	}
	return 0;
}
2022/3/18 11:40
加载中...