倍增跳跃的过程中,一定要特别注意特殊情况的处理,多连几条边也不少连,有以下几种可能出错的特殊情况:
原错误代码:
if(in) add_edge(to, fa[u][0].to);
else add_edge(fa[u][0].to, to);
更正后代码:
if(in){
add_edge(to, fa[u][0].in);
add_edge(to, fa[v][0].in);
}else{
add_edge(fa[u][0].out, to);
add_edge(fa[v][0].out, to);
}
3 2 1
2 1 2 100
1 2 2 3 3 2
0 100 102
4 2 2
2 1 2 100
1 1 1 3 3 2
100 0 102 -1
4 3 1
2 1 2 100
2 2 3 20
1 2 3 4 4 3
0 100 120 103
4 3 4
2 1 2 100
2 1 3 20
1 2 3 4 4 3
3 3 3 0