IOI2020国家集训队作业选做Part1

\(\color{red}\checkmark\)表示有做

\(\color{green}\checkmark\)表示有做,且写了题解

\(\circ\)表示尝试了,但是不会

\(\color{yellow}\checkmark\)表示想过了,但是没有写代码(口胡了)

(* easy)表示较简单

(* medium)表示中等

(* hard)表示难

以上难度均指思维难度,主观性较强,与luogu,cf评分可能出入较大,不过luogu有一些比较早的CF黑题是真的水

没标难度大部分是上古时期在做题的时候无意中做到的,差不多忘光了

进度(19 / 50)

Part1.

  1. CF504E(\(\color{red}\checkmark\))
  2. CF505E(\(\color{red}\checkmark\))
  3. CF506E (\(\circ\))(* hard)
  4. CF512D(\(\color{yellow}\checkmark\))(* easy)
  5. CF516D(\(\color{green}\checkmark\))(* easy)
  6. CF521E(\(\color{green}\checkmark\))(* medium)
  7. CF538G(\(\color{red}\checkmark\))(* medium)
  8. CF538H(\(\color{green}\checkmark\))(* medium)
  9. CF547E(\(\color{red}\checkmark\))(* easy)
  10. CF585E(\(\color{red}\checkmark\))(* easy)
  11. CF553E(\(\color{yellow}\checkmark\))(* medium)
  12. CF549E(\(\circ\))(* hard)
  13. CF555E(\(\color{yellow}\checkmark\))(* easy)
  14. CF568E(\(\color{red}\checkmark\))(* medium)

部分题目简要题解

如果是比较有趣的题会另外写题解,在这里挂链接,简单题就算了

  1. CF516D
  • 由直径的性质,我们注意到\(f_x\)表示的是到直径两端点的最大值,我们令\(v_x\)表示\(f_x = dis(x,v_x)\)
  • 考虑直径的中点,如果以其为根,那么对于根的任一子树,任意点的\(v_x\)一定会在另一颗子树内,即子树内部的\(f_x\)随着与深度同增同减,即父亲的\(f_x\)一定严格小于儿子的\(f_x\)
  • 如果直径的中点是一条边,那么取两端\(f_x\)较小的那个点即可
  • 根据以上性质,可以线段树合并,直接查询,也许可以用并查集做到更优的复杂度
  • 复杂度\(O(qn\log n)\)
  1. CF538G
  • 注意到上下左右走\(x,y\)互相约束,不好考虑
  • 考虑转坐标系,用切比雪夫距离来代替曼哈顿距离,\(x' = x + y,y' = y - x\)
  • 不等式约束计算一下即可
  1. CF538H
  1. CF553E
  • 注意一下转移中因为 j 的值单调增加,所以转移是 DAG,用记忆化搜索即可
  • 注意转移形式是一个半在线卷积,分治 FFT 即可
  1. CF555E
  • 把边双联通分块缩点,定向成强连通
  • 剩下的树上差分随便做就可以了
posted @ 2021-05-27 16:06  y_dove  阅读(121)  评论(0编辑  收藏  举报