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),再交也是过的
按道理来说这里应该对结果是有影响的啊,有没有神犇来解释一下原因
是我过水还是数据过水(大概率前者
评测记录