社区讨论

警示后人:90pts WA on task#1

P1395会议参与者 4已保存回复 3

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@mli03e6t
此快照首次捕获于
2026/02/11 20:23
上周
此快照最后确认于
2026/02/13 20:05
6 天前
查看原帖
我不知道你是用的什么方法,反正如果你用重链剖分求树的中心的话你倍增部分如果像这么些会错。
CPP
for (int i = 19; ~i; --i)
    if (siz[fa[x][i]] < n / 2)
        x = fa[x][i];
x = fa[x][0];
出错原因是当 nn 取奇数,且整棵树就是一条链时,这个倍增跳不上去,反例:
TEXT
5
1 2
2 3
3 4
4 5
你应该这么写:
CPP
for (int i = 19; ~i; --i)
    if (siz[fa[x][i]] < (n + 1) / 2)
        x = fa[x][i];
x = fa[x][0];

回复

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

正在加载回复...