最近公共祖先求救

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int inf=0x7f7f7f7f;
const int N=1e4+10;
int n,a,b,tot;
vector<int> g[N];
int dfn[N],f[25][N];
void add(int u,int v){
	g[u].push_back(v);
	g[v].push_back(u);
}
void dfs(int u,int fa){
	dfn[u]=dfn[fa]+1;
	f[0][u]=fa;
	for(int i=1;i<=20;i++)
		f[i][u]=f[i-1][f[i-1][u]];
	for(auto v:g[u])
		if(v!=fa) dfs(v,u);
}
int lca(int u,int v){
  	if(dfn[u]<dfn[v]) swap(u,v);
  	for(int i=20;i>=0;i--)
  		if(dfn[f[i][u]]>=dfn[v])
  			u=f[i][u];
  	if(u==v) return u;
  	for(int i=20;i>=0;i--)
  		if(f[i][u]!=f[i][v])
  			u=f[i][u],v=f[i][v];
  	return f[0][u];
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>a>>b;
	while(!cin.eof()){
		int u,v;
		char p;
		cin>>u;
		p=getchar();
		while(p==' '){
			cin>>v;
			add(u,v);
			p=getchar();
		}
	}
	dfs(1,0);
	for(int i=1;i<=__lg(n);i++)
		for(int j=1;j+(1<<i)-1<=n;j++)
			f[i][j]=f[i-1][f[i-1][j]];
	cout<<lca(a,b);
	return 0;
}

发亿下题面

我点进去会403的·


进不去

@吴梓峤 请将帖子放到问题讨论区,并将名字改好

()

看到了,改完了变成0分了

到那个帖子里说吧

已A,此贴结