厌氧代码求助
查看原帖
厌氧代码求助
270791
WanderingTrader楼主2020/7/11 20:04
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
#define N 500005
int fa[N],d[N];
vector <int> e[N];
void add(int u,int v){e[u].push_back(v);e[v].push_back(u);}
void dfs(int x,int f)
{
	fa[x] = f;
	d[x] = d[f]+1;
	int size = e[x].size();
	for(int i = 0;i < size;++i)
		if(e[x][i] != f)
			dfs(e[x][i],x);
}
int LCA(int x,int y)
{
	while(d[x] > d[y]) x = fa[x];
	while(d[y] > d[x]) y = fa[y];
	while(x != y){x = fa[x];y = fa[y];}
	return x;
}
inline int read()
{
	int x=0,f=1;
	char c=getchar();
	while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
	while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
	return x*f;
}
int main()
{
	int n=read(),m=read(),rt=read();
	for(int i = 1;i < n;++i)
		add(read(),read());
	dfs(rt,0);
	while(m--)
		printf("%d\n",LCA(read(),read()));
	return 0;
}

按照老师教的板子写的,哪些地方还能优化吗?

2020/7/11 20:04
加载中...