自尽氚气出题人+rui 之 氚荠甲苯二酸 代码

news/2024/11/17 22:34:31/文章来源:https://www.cnblogs.com/Ariginal/p/18414176

运输计划

显然我们可以处理出每个区间正方向和反方向走的代价,那么最后的问题可以转化为每个点选择 \(0/1\) 之一,要求区间的选择两两不冲突,在这个基础上最小化代价之和。

则,可以参考 \(2-SAT\) 的思路,处理出每个点选择 \(0/1\) 两两的限制状况,不难发现这种限制应该是对称的,而且有一些限制是双向的。

为了方便讨论,我们钦定所有区间为顺时针顺序从 \(s\) 指向 \(t\)

参考物理学上理想化模型的方法,考虑最简化的情况,即只有两个区间的时候。

显然,两个区间的状态只有 “相交”,“相离”,“包含”,三种关系。

对于 “相交” 我们发现, 这两个区间的 \(0/1\) 状况必然是一样的。

而 “相离” 也是同理。

最后的包含特殊一些,若 \(a\rightarrow b\),则 \(a\)\(1\) 那么 \(b\) 必须取值 \(1\)\(b\)\(0\) 那么 \(a\) 必须取 \(0\)

由此,我们可以 \(O(n^2)\) 判定两个区间的关系,并连边建出一张图,然后 Tarjan 缩点(不难发现缩点之后的形态一定是一条链),在链上枚举一下 \(0,1\) 交界计算贡献。

考虑优化整个建图过程,我们发现建图本身是一个查询二维偏序的点的过程,所以直接狂暴线段树优化建图即可。

但是太狂暴了。

所以考虑另一种优化思路,我们发现,如果有若干个区间两两相离,它们会形成一个完全图,而最后都会缩成一个点。

那么就没有必要把这样的完全图建出来,只需要相邻的两个相离区间连边即可。

同样,对于相交的区间,只需要相邻的两个相交区间连双向边即可。

那么现在要处理的问题是包含关系。

不难发现,包含关系也只需要处理一级包含即可。

所以我们将所有区间按照右端点排序(右端点相同的按左端点排序),从左到右扫描每个区间,用一个栈维护当前相离的所有区间,每次新加入一个区间的时候将所有被这个区间包含的区间出栈,然后可能会出现一个于它相交的区间,也出栈,如果栈里还剩有区间,那么一定是左边某个和它相离的区间。

对于每一类区间按照上述规则连边即可。

但是还有个问题,比如遇到形如

本来应该两个点都和右边的区间连双向边的,但由于其中一个被覆盖了,导致另一个边无法访问其。

解决方法很简单,按右端点排序左端点升序降序各跑一遍,按左端点排序右端点升序降序各扫一遍,那么每一条链最下面那个点和最上面那个点都连上了双向边,就避免了这种情况的出现。

实际上做法还有很大一堆,这里推荐一种 @Rain 的优雅做法。

最初全顺时针定向,处理好全顺/逆的答案。对于一对区间,若相离,则必须不变向(不然就是全顺/逆了),若相交,则必须同时变/不变,若包含,则只有外层变了内层才能变。
按套路断环为链,讨论每一个区间是否有相离。求出若干固定区间后,把这些的相交区间也搞出来 (这里由于数据水,没写),它们都必须不变。
对于剩下的 “全包含固定的区间的” 区间,它们的开口必须在同一个空隙 (由于数据水,也没判),然后,重标号,使它们的交位于正中间,那么一个区间左端点必然在 \([1,n]\),右端点必然在 \([n+1,2n]\)。拍到二维平面上,求右上角的覆盖点。被覆盖的点一定和覆盖点等价。

但是注意一个麻烦的地方,轮廓上的点可以被内部的点合并,所以在用并查集维护一个真正的可选变不变的点集。因为每次都是区间 merge,所以并查集加速即可。(由于数据太水,最开始逆时针重标号可以直接过,所以就没写)

时间复杂度 \(O(n\log_2n)\) 实际上可以用基数排序做到 \(O(n)\)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/797064.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十一,Spring Boot 当中配置拦截器的“两”种方式

十一,Spring Boot 当中配置拦截器的“两”种方式 @目录十一,Spring Boot 当中配置拦截器的“两”种方式1. 准备工作:2. Spring Boot当中配置拦截器的第一种方式:通过配置类的方式3. Spring Boot 当中配置拦截器的第二种方式:4. 补充:URI 和 URL 的区别5. 总结:6. 最后:…

PbootCMS常用公司信息标签调用

以下是 PbootCMS 常用公司信息标签的表格形式,方便查阅和使用:标签名 描述 示例代码{pboot:companyname} 公司名称 {pboot:companyname}{pboot:companyaddress} 公司地址 {pboot:companyaddress}{pboot:companypostcode} 邮政编码 {pboot:companypostcode}{pboot:companycont…

Electric Power

Power How Batteries Work电池提供给外面稳定的电压氧化反应,电压会逐渐减少,知道不能给设备供电。USB PD(Power Delivery) ref:https://www.usbzh.com/article/detail-479.html USB Types Type A, Type B vs Type CType C:reversible bi-directional power capabilities bet…

记忆力训练:解锁大脑潜能的钥匙

记忆力训练:解锁大脑潜能的钥匙 在快节奏的现代生活中,良好的记忆力成为了我们学习、工作乃至日常生活中不可或缺的能力。无论是背诵长篇课文、记忆复杂数据,还是快速回顾过往经历,强大的记忆力都能让我们事半功倍。然而,随着年龄的增长和生活压力的增加,许多人发现自己的…

PbootCMS做英文站面包屑“首页”怎么处理

在使用 PbootCMS 构建英文站点时,需要将面包屑中的“首页”文字改为英文“Home”。可以通过设置面包屑标签的参数来实现这一需求。 面包屑标签 标签格式:html{pboot:position}参数说明:separator=*:分隔符,默认为 >>。 separatoricon=*:分割图标,默认为空,如使用…

PbootCMS栏目页如何调用当前栏目的文章

要在栏目页调用当前栏目的文章,可以使用 PbootCMS 提供的 {pboot:list} 标签。以下是如何在栏目页调用当前栏目的文章的具体方法。 1. 栏目页调用当前栏目的文章 假设你需要在栏目页调用当前栏目的文章,可以使用以下代码:{pboot:list num=10 scode={sort:scode} page=0}<…

运行PbootCMS系统有哪些环境要求?

为了确保 PbootCMS 系统能够顺利安装和运行,以下列出了 PbootCMS 的基本运行环境要求: 1. PHP 版本要求最低要求:PHP 5.4+ 推荐版本:支持最新的 PHP 7.0、7.1、7.2 兼容性:由于 PbootCMS 支持 SQLite 和 MySQL 数据库,因此即使空间没有配置 MySQL,也可以使用 SQLite 方式…

PbootCMS配置留言发送到QQ邮箱教程

要在 PbootCMS 中配置留言发送到 QQ 邮箱,可以按照以下步骤进行操作: 1. 登陆 QQ 邮箱,找到设置 > 账户登录 QQ 邮箱:打开 QQ 邮箱。进入设置 > 账户:在 QQ 邮箱首页右上角点击“设置”,然后选择“账户”。2. 开启 SMTP 服务找到 SMTP 服务设置:在账户设置页面向下…

PbootCMS嵌套调用栏目二级三级目录

在PbootCMS中,可以通过特定的标签来嵌套调用多级目录。以下是如何使用这些标签来实现顶级、二级和三级目录的嵌套调用。 1. 顶级导航菜单列表调用{pboot:nav}<a href="[nav:link]">[nav:name]</a> {/pboot:nav}说明:nav 标签用于调用顶级导航菜单列表。…

高等数学 2.1 导数概念

目录一、导数的定义函数在一点处的导数与导函数单侧导数二、导数的几何意义三、函数可导性与连续性的关系 一、导数的定义 函数在一点处的导数与导函数定义 设函数 \(y = f(x)\) 在点 \(x_0\) 的某个邻域内有定义,当自变量 \(x\) 在 \(x_0\) 处取得增量 \(\Delta x\) (点 \(x…

haproxy2.8(LTS版本)+keepalived高可用

Tar包安装,编译支持SSL证书Tar包目录: /opt/安装目录: /usr/local/haproxy配置文件目录: /etc/haproxy/haproxy.cfgF启停方式: systemctl start|stop|restart|status haproxy一、Keepalived 安装在两台服务器上做主备 keepalived.conf(master)global_defs {router_id ha1vrrp_…