合并入栈时,因为我 swap
了节点,而 stak[++ topS]
却放在了交换之前,所以导致统计出错(样例是真的水)。
:::error[错误代码]{open}
void Merge(int u, int v) {
u = fid(u);
v = fid(v);
if(u ^ v) {
stak[++ topS] = MPP(u, v, deep[v]);
if(deep[u] > deep[v]) swap(u, v);
root[u] = v;
if(deep[u] == deep[v]) deep[v] ++;
}
else stak[++ topS] = MPP(0, 0, 0);
}
:::
:::success[正确代码]{open}
void Merge(int u, int v) {
u = fid(u);
v = fid(v);
if(u ^ v) {
if(deep[u] > deep[v]) swap(u, v);
stak[++ topS] = MPP(u, v, deep[v]);
root[u] = v;
if(deep[u] == deep[v]) deep[v] ++;
}
else stak[++ topS] = MPP(0, 0, 0);
}
:::