全TLE,代码求调(悬关!!)
查看原帖
全TLE,代码求调(悬关!!)
574921
Dress楼主2023/8/15 11:19
#include<bits/stdc++.h>
#define N 0x7ffff
using namespace std;
inline int read()
{
    register int x=0;
	bool f=1;
	register char c=getchar();
    while(c<48||c>57){
		if(c=='-') f=0;
		c=getchar();
	}
    while(c>=48&&c<=57){
		x=x*10+(c^48);
		c=getchar();
	}
    return f?x:-x;
}
int n,m,s,x,y,f[N][25];
int dum[N],nex[N],first[N],go[N],num;
int add(int u,int v){
	nex[num++]=first[u];
	first[n]=num;
	go[num]=v;
}
void dfs(int u,int fa){
	dum[u]=dum[fa]+1;
	for(int i=0;i<=19;i++)
		f[u][i+1]=f[f[u][i]][i];
	for(int i=first[u],v;v=go[i],i;i=nex[i]){
		if(v==fa)continue;
		f[v][0]=u;
		dfs(v,u);
	}
}
int lca(int x,int y){
	if(dum[x]<dum[y])swap(x,y);
	for(int i=20;i>=0;i--){
		if(dum[f[x][i]]>=dum[y])
		x=f[x][i];
	}	
	if(x==y)return x;
	for(int i=20;i>=0;i--){
		if(f[x][i]!=f[y][i]){
			x=f[x][i];
			y=f[y][i];
			}	
	}
	return f[x][0];
}
int main(){
	n=read();
	m=read();
	s=read();
	for(int i=1;i<n;i++){
		x=read();y=read();
		add(x,y);add(y,x);
	}
	dfs(s,0);
	for(int i=1;i<=m;i++){
		x=read();y=read();
		cout<<lca(x,y)<<endl;	
	}
	return 0;
}

我也不知道为什么全TLE了,求大佬

2023/8/15 11:19
加载中...