root[i] = root[i - 1];
int x = find(root[i], a), y = find(root[i], b);
if (fa[x] == fa[y]) continue;
if (dep[x] < dep[y]) swap(x, y);
merge(root[i - 1], root[i], 1, n, fa[y], fa[x]);
if (dep[x] == dep[y]) root[i] = add(root[i], 1, n, fa[x]);
最后一行若写成
if (dep[x] == dep[y]) dep[findnode(root[i], 1, n, fa[x])]++;
会在 #2, #5, #6 中 TLE
这个新建的版本是如何影响运行时间的,感觉这个版本没有任何用处