如题,假设f[x][i]是节点 x 的第 2i 级祖先,那要查 x 最近的标记祖先,那就从 x 开始跳回结果会TLE。按理说这样做每次查询仍然是 O(logn) 的复杂度才对。。
算法代码如下:
int solve(int x)
{
int i,j;
if(v[x]) return x;
while(!v[x])
{
if(v[f[x][0]]) return f[x][0];
for(i=1;i<25&&pw2[i]<=dep[x];i++)
if(!v[f[x][i-1]]&&v[f[x][i]])
break;
x=f[x][i-1];
}
return x;
}
是我想得太简单了还是啥?这样做每次查询不是 O(logn) 吗??