注意在弹出栈内元素时要将 uuu 也弹出。
非
while (st[top - 1] != u) { int v = st[top --]; ans[acnt] ++; color[v] = acnt; vis[v] = 0; }
而是
while (1) { int v = st[top --]; ans[acnt] ++; color[v] = acnt; vis[v] = 0; if (v == u) break; }
区别:第二个代码将 uuu 点也更新了。