社区讨论

最小生成树、倍增16分可能得错误

P2245星际导航参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mewlmh0e
此快照首次捕获于
2025/08/29 16:56
6 个月前
此快照最后确认于
2025/11/03 23:43
4 个月前
查看原帖
lca中:
CPP
int lca(int u,int v)
{
	int ans = 0;
	if(dep[u] > dep[v]) swap(u,v);//dep[u] < dep[v],u更靠近根节点
	while(dep[u] != dep[v])
	{
		ans = max(ans,mx[v][lg2[dep[v] - dep[u]]]);
		v = fa[v][lg2[dep[v] - dep[u]]];
	}
	if(u == v) return ans;
	for(int i = lg2[dep[u]];i >= 0;i--)
	{
		if(fa[u][i] != fa[v][i])
		{
			ans = max(ans,mx[u][i]);
			ans = max(ans,mx[v][i]);
			u = fa[u][i],v = fa[v][i];
			
		}
	}
	ans = max(ans,mx[u][0]);
	return max(ans, mx[v][0]);
}
在最后一步跳到父节点时可能只考虑了ans = max(ans,mx[u][0]); 而没有考虑另一点跳的边权。

回复

0 条回复,欢迎继续交流。

正在加载回复...