zoukankan      html  css  js  c++  java
  • CF1446E Long Recovery(附证明)

    一个长这样的网格图(坐标范围((Z,Z))):

    一开始有些点是黑点,有些点是白点。

    每次网格图会产生如下变化:选择恰好一个能改变颜色的格子将其改变,条件为:这个格子存在两个反色的相邻格子。

    直到不能变化为止。

    问最坏情况下,是否能全部染白,如果能变化次数最多是多少。

    给出若干个初始黑点的坐标,初始黑点坐标范围为((0dots 499,0dots 499))。初始黑点点数最多为(500^2)


    有一说一这题不给个能卡掉明显错误贪心的样例,差评。

    但题目确实难想,翻译着题解的证明尝试去理解。

    首先想如何判断是否能全部染白。这里可以贪心:先将所有的操作都用于染黑,全部染黑之后再染白(显然这个情况下不会存在再染黑的情况)。如果最后全白了,说明可以。

    但是如果这个做法套用到最长操作次数上,它就错了。原因在于在尽量染黑的过程中,可能出现染白后再染黑的情况。

    搬下dyp博客的图:

    最优可行解可以自己玩玩。

    系统地定义答案的上限。定义(phi)为相邻的不同颜色的格子的个数。可以发现每次操作过后(phi)只会变成(phi-1)(phi-3)。分别称其为好操作和坏操作。正确的做法应该最小化坏操作的次数。

    定义(overline A)为黑点点集(A)在经过尽量染黑的操作之后形成的点集。

    先尽量染黑,对于其中的每个连通块,假设它是(overline A)。那么处理完(A)的时候,最后一个点必须要用坏操作;而在中间处理的时候能够一直用好操作,除非:(A)是个triforce(题解发明的一个词,字典中似乎没有它的实际含义,也不知如何翻译……)。

    (下面会给出证明)

    triforce长这样:

    就是(|A|=3),且(A)中的三个黑格子都是同一个白格子的邻居。

    所以做法就是:先计算一开始的(phi),减去二倍连通块个数,减去二倍triforce的个数。

    证明:如果没有triforce,那么不需要多余的坏操作。

    以下证明是搬官网题解加上自己的一点点润色。

    假设(A)是一个有至少两个格子的集合,满足:

    1. (overline A)无环。
    2. (overline A)联通。
    3. (A)不是triforce。

    可以证明这里存在一个好操作,使得操作后的集合(A')仍然满足这三个性质。显然性质1一直成立(因为(overline {A'}subseteq overline A)),接下来证明后面两个性质。分类讨论:

    1. 存在一个白变黑的好操作。显然成立,做下去。

    2. 不存一个白变黑的好操作,但存在一个黑变白的好操作。假设(c)变白,因为不存在白变黑的好操作,所以(overline A setminus A)中每个格子在(A)有三个邻居。至少两个在(A setminus c),于是(overline A setminus A subseteq overline {A setminus c})。即(overline A setminus c setminus (A setminus c) subseteq overline {A setminus c}),因为(A setminus c subseteq overline {A setminus c}),所以(overline A setminus c subseteq overline {A setminus c})

      可以证明(overline {A setminus c})联通:(1)(c)(overline A)的一个叶子,显然去掉后仍然联通;(2)(c)不是(overline A)的叶子,那么(c)至少有两个邻居,在集合(overline A setminus c)内,也在(overline {A setminus c})内,于是(c)也在(overline {A setminus c})内,得出(overline {A setminus c}=overline A)

      如果是个(A setminus c)是个triforce,那么(A)一定是个triforce加一个相邻的格子,这个情况下存在另一个(c),选了它仍然满足。那么一开始就选另一个(c)就好了。

    3. 如果不存在好操作,那么:(A)中的格子不相邻(如果相邻一定成大小不为(1)的树,一定有叶子结点满足在(A)中只有一个邻居),并且(overline A setminus A)(A)包围。因为(A)至少有两个格子,且(overline A)联通无环,只能构造出triforce满足这个条件。

      借用下官方题解的图以助于理解:

      显然中间的黑色点必须要选。绿色点不能选因为没有点相邻,红色点不能选因为如果选了会出现环。

    于是证完了。


    怠惰,懒得写。

  • 相关阅读:
    02 . Vue入门基础之条件渲染,列表渲染,事件处理器,表单控件绑定
    iptables防火墙简介,原理,规则编写,做网络防火墙,常见案例
    Go之发送钉钉和邮箱
    Jumpserver简介,部署及使用
    01 . Go语言实现SSH远程终端及WebSocket
    KVM简介,安装及常见使用,维护详解
    05 . Gin+Vue开发一个线上外卖应用(Session集成及修改用户头像到Fastdfs)
    04 . Gin+Vue开发一个线上外卖应用(用户名密码和图形验证码)
    03 . Gin+Vue开发一个线上外卖应用(用户数据创建,插入,跨域处理)
    02 . Go之Gin+Vue开发一个线上外卖应用(集成第三方发送短信和xorm生成存储数据库表)
  • 原文地址:https://www.cnblogs.com/jz-597/p/14008291.html
Copyright © 2011-2022 走看看