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))\)

posted @ 2020-05-28 15:59  Grice  阅读(128)  评论(0编辑  收藏  举报