for(ll i=1;i<n;i++){ ll ru=root(a[i]),rv=root(b[i]); ll mu=ru,mv=rv; if(cnt[ru]>cnt[rv])mu=rv,mv=ru; for(ll u:to[mu])root(u); for(ll u:to[mu])to[mv].push_back(u); cnt[mv]+=cnt[mu],id[mu]=mv; }
感觉有点像 O(nlog2n)O(n\log^2n)O(nlog2n),但是跑不满