不理解,求解释
查看原帖
不理解,求解释
1287286
puxinzi楼主2025/7/22 13:28
#define ll long long
//头文件以及部分变量、数组的定义(省)
vector<int> g[500004];
void dfs(ll u,ll fa)
{
	f[u][0]=fa;
	dep[u]=dep[fa]+1;
	for(auto v:g[u])
	{
		if(fa^v) dfs(v,u);
	}
}
void init()
{
	for(ll j=1;j<=20;j++)
	{
		for(ll i=1;i<=n;i++)
		{
			f[i][j]=f[f[i][j-1]][j-1];
		}
	}
}
ll lca(ll u,ll v)
{
	if(dep[u]<dep[v])swap(u,v);
	for(ll i=20;i>=0;i--)
	{
		if(dep[f[u][i]]>=dep[v]) u=f[u][i];	
	} 
	if(u==v) return u;
	for(ll i=20;i>=0;i--)
	{
		if(f[u][i]!=f[v][i]) u=f[u][i],v=f[v][i];
	}
	return f[u][0];
}
int main()
{
	//输入(省)
	dfs(s,0);
	init();
	for(ll i=1;i<=m;i++)
	{
		ll a,b;
		cin>>a>>b;
		cout<<lca(a,b)<<'\n';
	}
	return 0;
}

上述代码已经AC,为了防止部分用户直接完整借鉴进而带来不良影响,将部分内容进行了省略,请各位谅解。

本人已经理解了这篇代码的大部分内容,但是对于dfs函数的编写以及具体意义尚有不足,有没有dalao帮我解释一下QWQ~

2025/7/22 13:28
加载中...