个人思路:

每个点向相邻沙子连边,向本列和相邻 \(2\) 列下方第一个沙子连边。

对于一个 DAG,所有入度为 \(0\) 的点会覆盖全部点。我们缩点即可通过 F1。

但是这样做是过不了 F2 的。

我们发现一个沙子下落,其下面的所有沙子都会下落,也就是说,第 \(i\) 列从下往上第 \(a_i\) 个沙子一定会直接或间接下落。

我们维护每行取最上方的沙子,它一定能覆盖一个连续的区间。因为每行只能让相邻两列下落,不可能不连续。

那么我们只需要求出每列最高点的覆盖区间,这个问题就转化为了区间覆盖问题。

先求区间。

我们对每个点计算相邻两列不比这个点高的最高点的位置,对其建边。这可以通过从低往高枚举每一行实现。

我们从每列最高点分别向两边搜索,不断沿边走,到达一个点后不断往上走直到上方相邻的点没沙子。以左边为例,在第 \(i\) 列小于 \(a_i\) 时,停止搜索,此时区间左端点就是 \(i+1\)。

然后区间覆盖,比较简单。

我们维护下标 \(now\) 与 \(R\),表示当前覆盖了 \([1,now]\),已有线段中可以覆盖到 \(R\)。到一个节点时,用以该节点为左端点的线段更新 \(R\),如果这个点没有被覆盖,\(now \leftarrow R\),表示直接覆盖到 \(R\)。

上述算法假了,hack 如下:

6 8
#.#..##.
..####..
..#..###
..##.##.
.#.####.
####.#..
1 2 2 3 1 5 2 1

显然可以在第 \(4\) 列走回第 \(3\) 列,第 \(1\) 列即可覆盖所有。

必须 dfs。与 F1 类似,向本列和相邻 \(2\) 列下方第一个沙子连边,然后暴力沿边搜索。

最坏情况下每个点走一遍全图,直接寄。

然后就不会了。

正解:

上述算法是假的,一个点覆盖区间连续的结论是错误的,例如 test #\(5\)。

但是我们发现可以覆盖一个点的列是连续的区间,因为如果某一列最高点不能覆盖到一个点,整列的点都不能覆盖到这个点,而外面的列需要通过这一列,也覆盖不到。我们可以通过 dfs 计算每个点的区间左端点和右端点。

我们从左到右枚举每列最高的位置,从这里进行搜索,搜到的点的区间左端点为当前枚举到的列。我们不搜已经搜过的点,因为是从左往右搜,先搜到的一定比后搜到的更优。

题目转化为若干个限制条件 \([l_i,r_i]\) 表示区间内的数至少选一个。

我们贪心选点。假设我们上一个选点位置 \(pre\),这一次选点位置 \(p\) 应当满足:

  1. \(p\) 最右可以选到所有 \(l_i > pre\) 的限制中 \(r_i\) 的最小值,否则不满足限制。
  2. \(p\) 选的越靠右越好,因为剩下的限制更少,接下来选点数更少。

发现每次直接选所有 \(l_i > pre\) 的限制中 \(r_i\) 最小值,可以对每个位置预处理得到。

这道题虽然正解是建图 \(+\) 缩点 \(+\) dp \(+\) 贪心的难度为 \(3000\) 的题,却可以简单的搜索。

一定要扔进校内模拟赛。

CF1534F2 Falling Sand (Hard Version)的更多相关文章

  1. Using zend-paginator in your Album Module

    Using zend-paginator in your Album Module TODO Update to: follow the changes in the user-guide use S ...

  2. CMSIS-SVD Example (Schema Version 1.1)

    <?xml version="1.0" encoding="utf-8"?> <!-- File naming: <vendor> ...

  3. idea 2019 1 spring boot 启动报错 An incompatible version [1.2.12] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]

    1.构建一个简单springboot工程,日志打印报错内容如下: 15:38:28.673 [main] DEBUG org.springframework.boot.devtools.setting ...

  4. ASP.NET Core: You must add a reference to assembly mscorlib, version=4.0.0.0

    ASP.NET Core 引用外部程序包的时候,有时会出现下面的错误: The type 'Object' is defined in an assembly that is not referenc ...

  5. java -version 问题

    我把 JAVA_HOME 从8改成了 7 , 为什么还是 显示的8啊 ! E:\sv0\jars>java -version java version "1.8.0_111" ...

  6. 记一次jdk升级引起的 Unsupported major.minor version 51.0

    之前jdk 一直是1.6,tomcat 是6.x 版本,, 现在引入的新的jar, 出现 Caused by: java.lang.UnsupportedClassVersionError: org/ ...

  7. Java–cvc-complex-type.4:Attribut ‘version’ must appear on element ‘web-app’

    问题解析: 在web.xml中的以下代码中 <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi=" ...

  8. 在idea中maven项目jdk编译version总是跳到1.5

    bug描述 项目ide: idea 项目构建工具:maven bug现象:每次修改pom之后,idea自动扫描一遍,然后发现默认的compile级别跳到5.0. 每次手动去setting里修改comp ...

  9. 未能加载文件或程序集“Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5”或它的某一个依赖项。系统找不到指定的文件。

    在创建ASP.NET MVC项目过程中发生了这个异常 未能加载文件或程序集"Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0 ...

  10. 无法解决“Microsoft.SharePoint.Security, Version=15.0.0.0,”与“Microsoft.SharePoint.Security, Version=14.0.0.0”之间的冲突

    VisualStudio 2013创建控制台项目,.NetFramework选为4.5.生成目标平台:x64.然后添加对Microsoft.SharePoint.dll的引用. 生成项目时," ...

随机推荐

  1. 01_windows、linux互ping不通解决方式

    一.NAT设置(NAT模式可访问公网,可连接本机,不可访问局域网) 1.编辑-->虚拟网络编辑器 2.设置NAT模式 二.配置Linux静态ip地址 1.命令:setup 2.配置完毕重启网卡: ...

  2. filebeat+Elk实现日志收集并使用kibana展示

    工作流程图 通过Filegeat收集日志,将日志的数据推送到kafka然后通过logstash去消费发送到Es,再通过索引的方式将数据用kibana进行展示: 1.部署测试机器规划 ip       ...

  3. airtest截图后放在allure报告里面。

    #需要导入的包 from airtest.aircv import * from airtest.aircv.utils import cv2_2_pil screen1 = G.DEVICE.sna ...

  4. QT--弹出新的对话框 show()/exec()的区别

    show()显示非模态对话框,exec()显示模态对话框. 非模态对话框不会阻塞程序的线程,因此 如果你的对话框时创建在栈上,跳出作用域之后,对象便销毁了,对话框会一闪而过: 如果使用new在堆上创建 ...

  5. sync.Once

    保证在 Go 程序运行期间的某段代码只会执行一次 func main() { o := &sync.Once{} for i := 0; i < 10; i++ { o.Do(func( ...

  6. OpenSSL测试-SM3

    OpenSSL测试-SM3 1.使用OpenSSL的命令计算你的8位学号的摘要值(SM3),提交截图. 运行结果 2.使用OpenSSL编程对计算"你的8位学号"SM3摘要值,提交 ...

  7. unity简单物理系统

    目录 技术概述 技术详述 2D物理系统组件 刚体 碰撞器 物理材质 碰撞检测函数 在主角中的使用 移动 长跳跃与短跳跃 二段跳 攀爬(蹬墙跳) 技术使用中遇到的问题和解决过程 技术概述 物理系统,就是 ...

  8. Xcode 12.x下载了iOS10.x模拟器无法创建对应Device问题修复

    转自: https://hiraku.tw/2021/04/6428/ 感谢原作者,如有侵权请评论联系删除文章 在升級到 Xcode 12 之後,有些人發現雖然 Xcode 允許安裝低版本的模擬器,但 ...

  9. kubeadm安装

    目录: 环境准备 所有节点安装docker 部署K8s集群 部署Dashboard 安装Harbor私有仓库 安装 master(2C/4G,cpu核心数要求大于2) 192.168.63.100 d ...

  10. webpack和source map

    当 webpack 打包源代码时,可能会很难追踪到 error(错误) 和 warning(警告) 在源代码中的原始位置. 如果打包后代码有一处错误,特别是使用的vue.react这些前端框架.打包后 ...