可能是因为你在写倍增数组时把循环搞反了位置。
具体如下:
错误代码:
for(int i=1;i<=n;i++){
for(int j=1;j<=23;j++){
int p=fa[i][j-1];
fa[i][j]=fa[p][j-1];
}
}
这样会导致很多点的2^k级祖先被误判为0
正确代码:
for(int j=1;j<=23;j++){
for(int i=1;i<=n;i++){
int p=fa[i][j-1];
fa[i][j]=fa[p][j-1];
}
}
只得六分的可能错误有非常多,应该只有我会犯这种低级错误吧