P8328 [COCI 2021/2022 #5] Usmjeravanj

本题的实际难度和通过数不是相符。

实际思维难度:蓝

代码实现难度:绿

部分1、简化题意

存在两条河流,假设分别叫做① 和 ②。

其中①号河流有 \(a\) 座城市, ② 号河流有 \(b\) 座城市。

河流方向是从编号小的城市流向编号大的城市,现在准备在两条河流的某些城市上建立 \(m\) 座桥, 每座桥都是单向的,请给定每座桥的方向,

其中 \(0\) 方向代表从河流 ① 上的城市到河流 ② 的城市, \(1\) 方向刚好相反。

现在需要使得强连通分量最少,请给出每座桥的具体方向(输出任意一个即可)

比如下图就是一个参考。

样例一分析:

输入:

5 3
4
1 2
2 3
3 1
5 3

输出:

按照下方给定的最优合法方案,是按照下图所示,所有城市都是连通的。

1
1 1 0 0

部分2、思路分析

首先上述的题目跟有向图的连通有关,大概率是强连通分量,如果没有给定边的选择,直接给定方向,直接可以建边获取得到scc。

值得注意的是,①号河流和②号河流的城市编号相同,肯定不可取,所以可以给②号河流加上一个偏移量

比如

add_edge(a[i], b[i] + n);

答案求解已经得到,重点是如何建边?

首先考虑的一点是,选定合适的桥的方向,可以减少强连通分量的数量,假设目前只有两座桥,先进行分类讨论:

情况一:两座桥不交叉,并且相同方向

结论:下述四种情况,最终无论情况如何,得到的结果对scc无影响。

情况二:两座桥不交叉,并且不同方向

结论:下述四种情况,最终无论情况如何,得到的结果对scc无影响。

情况三:两座桥交叉,并且相同方向

结论:下述两种情况对scc无影响

情况四:两座桥交叉,并且不同方向

结论:只有第一张图的方案可以使得scc数量减少,但是第二张图对scc无影响。

最终结论:所有的建边方向,考虑交叉之后,方向相反的答案(按照下图建边)

部分3、具体实现和代码细节

如何判断最终结论,首先假设将所有的桥进行了存储,分别标记为 \(x_i\) 和 \(y_i\) 。

桥交叉的话,只可能是以下两种选择

选择1、黑色桥是之前已经选择过的,红色的桥是现在需要控制方向的,此处无论黑色的桥的方向如何,

按照如下图所示的方向,从 $x_i $ 指向 $ y_i$ 一定是最佳的。

判断方式是

$x < x _ i $ 并且 $ y_i < y$

选择2、黑色桥是之后需要选择的,绿色桥是现在需要选择的方向,按照这种方式才可能交叉。

综上:桥的方向选择比较容易确定,考虑桥的选择的优先顺序,首先确立上述的绿色的边,然后确立红色的边会比较方便一些。

另外看到上述的判断方式,二维偏序关系,可以先排序处理为一维偏序。

按照 \(x\) 的顺序从小到大,这样我们在选择的时候,桥枚举的时候,①号河流的城市编号非递减,此时比较交叉的时候,下述关系的

$x < x _ i $ 自动满足,另外只需要找到 $ y_i < y$ ,那么如何判断有没有交叉,需要获取 \(R = y_{max}\) ,也就是之前选择过的桥的 \(y\) 的最大值。

因为我们需要让 \(y_i\) (现在枚举的桥) 交叉的数量最多,此时的 \(y\) (之前出现过的桥) 值越大越好。

说的简单点就是,下方的两座桥,当 \(x\) 相等的时候,我们肯定会优先把后面绿色的桥的方向考虑,因为后面的桥可以交叉的数量更多。

代码实现步骤:

步骤一:按照x作为第一关键词,从小到大排序,按照y作为第二关键词,从大到小排序

步骤二:如果枚举的y[i] <= R,说明有交叉,选定边的方向和上述图之中的红色边一致,也就是0方向;如果枚举的 y[i] > R ,说明没有交叉,但是此时的y更大,需要更新R, 此时按照绿色边(选择2)去处理更优,也就是 1 方向。

代码参照:

P8328 [COCI 2021/2022 #5] Usmjeravanj的更多相关文章

  1. 2021 & 2022年终回顾:山河无恙,烟火寻常

    前言 又到了一年一度年终回顾的时候了,回想起去年年底圣诞节的时候由于忙着参加黑客松大赛,一下子就进入了新的一年,失去了年终回顾的动力,所以今年提前两个月开始进行回顾,这样的话今年最后一天就可以顺利发文 ...

  2. 年中盘点 | 2022年,PaaS 再升级

    作者丨刘世民(Sammy Liu)全文共7741个字,预计阅读需要15分钟 过去十五年,是云计算从无到有突飞猛进的十五年.PaaS作为云计算的重要组成部分,在伴随着云计算高速发展的同时,在云计算产业链 ...

  3. Bzoj索引

    1001 : http://ideone.com/4omPYJ1002 : http://ideone.com/BZr9KF1003 : http://ideone.com/48NJNh1004 : ...

  4. 分析java.lang.NullPointerException thrown in RelativeLayout measure()

    典型的再现环境 模型: Sony Ericsson Android version: 2.3.4 StackTrace: E/AndroidRuntime( 3579): FATAL EXCEPTIO ...

  5. Hsql中In没有1000的限制

    SELECT * FROM user , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ...

  6. 解决Nginx重启时提示nginx: [emerg] bind() to 0.0.0.0:80错误

    Nginx是一款轻量级的Web服务器,特点是占有内存少,并发能力强,因而使用比较广泛,蜗牛今天在一个VPS上重启Nginx时提示“nginx: [emerg] bind() to 0.0.0.0:80 ...

  7. 转 nagios监控oracle运行状况

    https://blog.csdn.net/heizistudio/article/details/8638488 nrpe安装脚本 nagios-plugins-1.4.13.tar.gznrpe- ...

  8. MATLAB之数学建模:深圳市生活垃圾处理社会总成本分析

    MATLAB之数学建模:深圳市生活垃圾处理社会总成本分析 注:MATLAB版本--2016a,作图分析部分见<MATLAB之折线图.柱状图.饼图以及常用绘图技巧> 一.现状模式下的模型 % ...

  9. 小菜鸟之Oracle数据库

    select * from STUDENT; select * from mark; select * from COURSE; select * from teacher; --注释 select ...

  10. Oracle-SQL程序优化案例二

    有时候写得不规范的SQL语句真的是占用很多时间 以下是我在工作中发现的规律,如果字段过多的使用函数,尽量不要将这些字段串联在一起做匹配或查询条件,比如红色注释部分,在执行红色部分的时候 这个SQL程序 ...

随机推荐

  1. vue3 学习-初识体验-常见指令v-on和v-if

    继续来体验一波数据驱动结合绑定方法的实践案例. 这里以最常见的反转字符串为栗子来体验面向数据编程. v-on 用来绑定事件的, 然后将方法名写在 methods 中即可. <!DOCTYPE h ...

  2. 梯度下降(Gradient Descent)法

    梯度下降法(Gradient Descent)是求解无约束最优化问题最常用的方法之一,它是一种迭代方法,每一步的主要操作就是求解目标函数的梯度向量,将当前位置的负梯度方向作为搜索方向. 直观的表示可用 ...

  3. Kali Linux 从入门到实战:系统详解与工具指南

    Kali Linux 从入门到实战:系统详解与工具指南 1. Kali Linux 简介 Kali Linux 是一款基于 Debian 的 Linux 发行版,专为 渗透测试 和 网络安全审计 设计 ...

  4. odoo16里面修改tree视图样式

    一.在static文件夹下新建一个css文件夹并将*.css文件写入 /*该文件用来定义视图中的一些格式,需要用到的地方直接在xml文件中进行引用*/ /*语法说明*/ /* table th:nth ...

  5. 股票技术面分析方法-K线图

    看涨吞没形态 看跌吞没形态 启明星形态       图形信号:看涨信号.第三根K线实体越长,看涨信号越强. 关键要素: 第二根K线是纺锤线或十字星 第三根K线向上能覆盖第一根K线的大半部分实体 黄昏星 ...

  6. SmolVLA: 让机器人更懂 “看听说做” 的轻量化解决方案

    TL;DR 今天,我们介绍了 SmolVLA,这是一个轻量级 (450M 参数) 的开源视觉 - 语言 - 动作 (VLA) 模型,专为机器人领域设计,并且可以在消费级硬件上运行. 仅使用开源社区共享 ...

  7. Astah Community安装教程及使用说明(包括括菜单命令解释、操作向导说明、快捷命令说明)

    一.安装教程: 1.双击下载好的文件,允许安装(现在官网已经停刊免费的社区版了,如果想要下载社区版需要从其他地方寻找资源) 2.选择安装的语言,English,点击OK 3.next,接受协议,nex ...

  8. 建发弘爱 X 袋鼠云:加速提升精细化、数字化医疗健康服务能力

    厦门建发弘爱医疗集团有限公司(简称"建发弘爱")创立于2022年,是厦门建发医疗健康投资有限公司的全资子公司,专业从事医疗健康领域的医疗服务. 建发弘爱通过医疗.健康及产业服务三大 ...

  9. jupyter notebook中使用pytorch

    jupyter notebook中使用pytorch 1.问题 在使用pytorch时,使用jupyter notebook无法调用,也没有可以调整更改的环境 错误提示:No module named ...

  10. HZOI NOIP 2024 Round 24 T2 取石子 官方做法

    发现大多数的题解都是不同于官方题解的做法,这里我将介绍官方题解做法. Solution 证明先手是否可以必胜的方法相差无几,为了方便后边行文,这里介绍我的思路:考虑各堆石子和为奇数的情况(以下简称为& ...