• CF632F


    (2021.1.1 前 AC 800 祭!)


    先讲一个暴力做法。

    前两个条件直接跑。最后一个条件,就是说在 (i,j) 这两列中,画 (n) 条水平线经过的两个位置,不能全部 (<a_{i,j})。这个事情可以用 bitset 来优化。我们将 (a_{i,j}) 从小到大排序,实时在 bitset 里更新 (<a_{i,j}) 的,然后 bitset & 一下即可。

    复杂度三方除以 (w)


    然后是正解。

    注意到前两条限制满足了,这个矩阵可以看作一个邻接矩阵,值是边权。于是试图往图论去转化(一般转化到图论都是很需要思维的,例如某 flip)。

    我们将第三条稍微转化一下,将 (a_{j,k}leqmax(a_{j,o},a_{k,o})) 代入可得 (a_{i,j}leqmax(a_{i,j},a_{j,o},a_{k,o}))。代入更多次可以得到一个等价条件:(a_{i,j}) 不是任意一个包含 ((i,j)) 的环上的严格最大值。

    这跟 MST 的某些性质很像:树边不是任意一个包含它自身的加上一条非树边形成的环上的严格最大值。于是我们考虑求出 MST,之后怎么做呢。那么显然树边都不需要被检查了,检查非树边的时候,直觉告诉我们应该检查以它为两端的树上路径的 (max)。这很好证明:必要性显然的吧;充分性呢,可以归纳证,(x o y) 的路径中,一定是树上路径的边 (max) 非严格最小。

    求最小生成树呢,有 (m=n^2),那么 Kruskal 是 (mathrm O(mlog m)),Prim 是 (mathrm O!left(n^2 ight))。可见在这个完全图中,反而是 Prim 更优了。

    (蒟蒻第一次写 Prim 呢,请多多指教)u1s1 Prim 还真是巨好写。

    code: Kruskal Prim

  • 相关阅读:
    透过WebGL 3D看动画Easing函数本质
    vmware虚拟机Windows 2003上网问题
    JAVA多态学习2
    h5播放音乐
    Unity3D:粒子系统Particle System
    文章标题
    【面试加分项】java自己定义注解之申明注解
    osgi实战学习之路:1. ant+bnd+felix搭建osgi之HelloWorld
    Android简单实现Socket通信,client连接server后,server向client发送文字数据
    句子开头
  • 原文地址:https://www.cnblogs.com/ycx-akioi/p/solution-cf632f.html
Copyright © 2020-2023  润新知