在 LCA 里面用倍增写的时候如果从 35 枚举到 1 的话就是 0pts WA,但是有些点是对的。但是如果是从 20 枚举到 1 的话就是 100pts ,
想问问有什么问题
void dfs(int u,int p) {
de[u] = de[p] + 1;
fa[u][0] = p;
for (int k = 1; k <= 20; k ++)
fa[u][k] = fa[fa[u][k - 1]][k - 1];
for (auto it : e[u]) {
if (it.v == p) continue;
w[it.v] = {it.w1, it.w2};
dfs(it.v,u);
}
}
int LCA(int x,int y) {
if (de[x] < de[y]) swap(x,y);
int dh = de[x] - de[y];
for (int k = 20; k >= 0; k --) {
if ((dh >> k) & 1) x = fa[x][k];
}
if (x == y) return x;
for (int k = 20; k >= 0; k --) {
if (fa[x][k] != fa[y][k]) {
x = fa[x][k];
y = fa[y][k];
}
}
return fa[x][0];
}