d f s dfs dfs,发现顺序无影响,所以按长度依次 d f s dfs dfs 1 , 2 , 4 ⋯ , 2 n 1,2,4\cdots,2^n 1,2,4⋯,2n
枚举到 2 i 2^i 2i,将序列分组,每组 2 i + 1 2^{i+1} 2i+1个,相当于 2 i 2^i 2i的块两两一组,记 c n t cnt cnt表示非连续递增的块( 2 3 4 6 2\ 3\ 4\ 6 2 3 4 6递增不连续, 2 3 4 5 2\ 3\ 4\ 5 2 3 4 5连续递增)
求关键点形成的最小联通子树边权和的两倍
结论:关键点按 d f s dfs dfs序排序 x 1 , x 2 , x 3 ⋯ x n x_1,x_2,x_3\cdots x_n x1,x2,x3⋯xn, a n s = d i s ( x 1 , x 2 ) + d i s ( x 2 , x 3 ) + ⋯ + d i s ( x n − 1 , x n ) + d i s ( x n , x 1 ) ans=dis(x_1,x_2)+dis(x_2,x_3)+\cdots+dis(x_{n-1},x_n)+dis(x_n,x_1) ans=dis(x1,x2)+dis(x2,x3)+⋯+dis(xn−1,xn)+dis(xn,x1)
每次加入/删除点用 s p l a y splay splay维护即可,同时更新答案(减去原来的,加上现在的)
网络流+二分答案
在这里插入图片描述
区间操作想到线段树
每次合并区间,强行连两条横边构成环,删掉环上最小边,初始化全连竖边
记
就可以维护最小生成树,同时考虑特殊情况——一个区间只有一条竖边且被删掉了
再记
线段树+矩阵快速幂(占坑)
哈希
已知双旋转字符串前一半 s 1 s1 s1,构造后一半: s 1 + s 1 s1+s1 s1+s1,前 n n n个长度为 n n n的即为后一半
l u o g u − > l u o g u l u o g u − > l u o g u , u o g u l , o g u l u , g u l u o , u l u o g luogu->luoguluogu->luogu,uogul,ogulu,guluo,uluog luogu−>luoguluogu−>luogu,uogul,ogulu,guluo,uluog,对应的哈希即为减掉头,加上尾