滚滚长江东逝水
查看原帖
滚滚长江东逝水
222578
jingkongwanglimiaoa楼主2021/4/8 19:31

rt,在看以前的模板的时候,发现有块代码很让人迷惑

int lca(int u,int v)
{
	if (d[u] < d[v]) u = u + v,v = u - v,u = u - v;
	while (d[u] > d[v])
	{
		k = log(d[u] - d[v]) / log(2);
		u = f[u][k];
	}
	if (u == v) return u;
	k = log(u) / log(2);
	for (int pp = k;pp >= 0;pp--)
		if (f[u][pp] != f[v][pp]) u = f[u][pp],v = f[v][pp];
	return f[u][0];
}

有一句k = log(u) / log(2)

我想了半天,这里难道不应该是用深度来算吗,就把它改成了k = log(d[u]) / log(2),再交也是过的

按道理来说这里应该对结果是有影响的啊,有没有神犇来解释一下原因

是我过水还是数据过水(大概率前者

评测记录

2021/4/8 19:31
加载中...