rt。目前我的代码过了样例 & Hack 数据。
在往上跳重链的时候,我判断这两个链的相邻节点是否颜色相同,即判断 top[a] 和 fa[top[a]] 是否颜色相同。相同则将答案减一。
int query(int a, int b) {
int res = 0;
while (top[a] != top[b]) {
if (dep[top[a]] < dep[top[b]]) std::swap(a, b);
res += S.query(1, id[top[a]], id[a]).v - (S.query(1, id[fa[top[a]]]) == S.query(1, id[top[a]]));
a = fa[top[a]];
}
if (dep[a] > dep[b]) std::swap(a, b);
return res + S.query(1, id[a], id[b]).v;
}
我觉得这里可能会假。但也说不定是别的地方错了/kel
求调悬关。