所以这个题为啥用倍增法会TLE
查看原帖
所以这个题为啥用倍增法会TLE
115947
huangx607087楼主2023/9/9 15:16

如题,假设f[x][i]是节点 xx 的第 2i2^i 级祖先,那要查 xx 最近的标记祖先,那就从 xx 开始跳回结果会TLE。按理说这样做每次查询仍然是 O(log⁡n)O(\log n) 的复杂度才对。。 算法代码如下:

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(log⁡n)O(\log n) 吗??

2023/9/9 15:16
加载中...