jzoj6152
题意
给定\(n\)长度序列\(a_i\),对于一个平方串\([i,i+len-1][i+len,i+2len-1]\),\(\forall x\in[i,i+len-1]\),存在边\((i,i+len,w_{len})\)
求最小生成森林
做法
插点求出平方串,相当于\([l,r]\)向\([l+len,r+len]\)连\(w_{len}\)
这个可以转化成\([l,l+2^i-1]\)向\([l+len,l+len+2^i-1]\)连边,\([r-2^i+1,r]\)向\([r+len-2^i-1,r+len]\)连边
可以维护\(logn\)个并查集第\(i\)个维护\([x,x+2^i-1]\)与\([y,y+2^i-1]\)是否有连边
当在做\([x,x+2^i-1]\)与\([y,y+2^i-1]\)连边的时候,可以查询第\(i\)个并查集\(x,y\)是否有连边
- 有则退出
- 没有
\(x,y\)在该并查集连起来
若\(i=0\)则统计贡献
否则递归\([x,x+2^{i-1}-1]\)与\([y,y+2^{i-1}-1]\),\([x+2^{i-1},x+2^{i}-1]\)与\([y+2^{i-1},y+2^i-1]\)连边
\(O(nlogn\alpha(n))\)