SDOI2015 总结

文章目录

  • 4343【SDOI2015】排序
  • 4344【SDOI2015】寻宝游戏
  • 4346【SDOI2015】星际战争
  • 4347【SDOI2015】约数个数和
  • 4348【SDOI2015】道路修建
  • 5432【SDOI2015】音质检测
  • 5434【SDOI2015】双旋转字符串

4343【SDOI2015】排序

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连续递增)

  • c n t = = 0 cnt==0 cnt==0 不操作, d f s ( n e x t ) dfs(next) dfs(next)
  • c n t = = 1 cnt==1 cnt==1 交换那个块的前后两个小块
  • c n t = = 2 cnt==2 cnt==2 枚举四种交换情况
  • c n t > 2 cnt>2 cnt>2 无解 r e t u r n return return

4344【SDOI2015】寻宝游戏

求关键点形成的最小联通子树边权和的两倍

结论:关键点按 d f s dfs dfs序排序 x 1 , x 2 , x 3 ⋯ x n x_1,x_2,x_3\cdots x_n x1,x2,x3xn 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(xn1,xn)+dis(xn,x1)

每次加入/删除点用 s p l a y splay splay维护即可,同时更新答案(减去原来的,加上现在的)

4346【SDOI2015】星际战争

网络流+二分答案

  • S S S->激光
  • 激光->机器
  • 机器-> T T T
  • 判到 T T T满流( f l o w = = H i t p o i n t _ S u m flow==Hitpoint\_Sum flow==Hitpoint_Sum)

4347【SDOI2015】约数个数和

在这里插入图片描述

4348【SDOI2015】道路修建

区间操作想到线段树

每次合并区间,强行连两条横边构成环,删掉环上最小边,初始化全连竖边

  • 左/右边第一条竖边
  • 左/右边第一条竖边及其左/右所有横边的最大值
  • 区间答案

就可以维护最小生成树,同时考虑特殊情况——一个区间只有一条竖边且被删掉了

再记

  • 区间竖边个数
  • 区间所有横边最大值

5432【SDOI2015】音质检测

线段树+矩阵快速幂(占坑)

5434【SDOI2015】双旋转字符串

哈希

已知双旋转字符串前一半 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,对应的哈希即为减掉头,加上尾

你可能感兴趣的:(题解题解,省选刷题)