SD 写了如下代码:
void dfs(int x) {
if(ps[x]) upd(root[x], 1, F1.tot, ps[x]);
for(int i = 0; i < G[x].size(); ++ i) dfs(G[x][i]), root[x] = merge(root[x], root[G[x][i]]);
}
这个写法是可以通过本题的。
然而循环如果被改成这样:
void dfs(int x) {
if(ps[x]) upd(root[x], 1, F1.tot, ps[x]);
for(int i = 0; i <= G[x].size() - 1; ++ i) dfs(G[x][i]), root[x] = merge(root[x], root[G[x][i]]);
}
则全部变为 RE。
这是为什么?