P8328 [COCI 2021/2022 #5] Usmjeravanj
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的更多相关文章
- 2021 & 2022年终回顾:山河无恙,烟火寻常
前言 又到了一年一度年终回顾的时候了,回想起去年年底圣诞节的时候由于忙着参加黑客松大赛,一下子就进入了新的一年,失去了年终回顾的动力,所以今年提前两个月开始进行回顾,这样的话今年最后一天就可以顺利发文 ...
- 年中盘点 | 2022年,PaaS 再升级
作者丨刘世民(Sammy Liu)全文共7741个字,预计阅读需要15分钟 过去十五年,是云计算从无到有突飞猛进的十五年.PaaS作为云计算的重要组成部分,在伴随着云计算高速发展的同时,在云计算产业链 ...
- Bzoj索引
1001 : http://ideone.com/4omPYJ1002 : http://ideone.com/BZr9KF1003 : http://ideone.com/48NJNh1004 : ...
- 分析java.lang.NullPointerException thrown in RelativeLayout measure()
典型的再现环境 模型: Sony Ericsson Android version: 2.3.4 StackTrace: E/AndroidRuntime( 3579): FATAL EXCEPTIO ...
- Hsql中In没有1000的限制
SELECT * FROM user , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ...
- 解决Nginx重启时提示nginx: [emerg] bind() to 0.0.0.0:80错误
Nginx是一款轻量级的Web服务器,特点是占有内存少,并发能力强,因而使用比较广泛,蜗牛今天在一个VPS上重启Nginx时提示“nginx: [emerg] bind() to 0.0.0.0:80 ...
- 转 nagios监控oracle运行状况
https://blog.csdn.net/heizistudio/article/details/8638488 nrpe安装脚本 nagios-plugins-1.4.13.tar.gznrpe- ...
- MATLAB之数学建模:深圳市生活垃圾处理社会总成本分析
MATLAB之数学建模:深圳市生活垃圾处理社会总成本分析 注:MATLAB版本--2016a,作图分析部分见<MATLAB之折线图.柱状图.饼图以及常用绘图技巧> 一.现状模式下的模型 % ...
- 小菜鸟之Oracle数据库
select * from STUDENT; select * from mark; select * from COURSE; select * from teacher; --注释 select ...
- Oracle-SQL程序优化案例二
有时候写得不规范的SQL语句真的是占用很多时间 以下是我在工作中发现的规律,如果字段过多的使用函数,尽量不要将这些字段串联在一起做匹配或查询条件,比如红色注释部分,在执行红色部分的时候 这个SQL程序 ...
随机推荐
- Python基础 - 多线程(上)
前面对 进程 一点认识, 通俗理解, 进程是操作系统(OS)进行资源调度分配的基本单元. 每个程序的至少就一个进程在OS中被"监控"着的哦. 然后围绕着多进程, 用消息队列共享全局 ...
- Java Solon v3.3.0 发布(国产优秀应用开发基座)
Solon 框架! Solon 是新一代,Java 企业级应用开发框架.从零开始构建(No Java-EE),有灵活的接口规范与开放生态.采用商用友好的 Apache 2.0 开源协议,是" ...
- python任务调度之schedule
本文通过开源项目schedule来学习定时任务如何工作 schedule简介 先来看下做做提供的一个例子 import schedule import time def job(): print(&q ...
- DataFrame.iterrows的一种用法
import pandas as pd import numpy as np help(pd.DataFrame.iterrows) Help on function iterrows in modu ...
- 推荐一个Elasticsearch ES可视化客户端工具:ES-King,支持win、mac、linux
ES-King:开源免费,一个现代.实用的ES GUI客户端,支持多平台. 下载地址:https://github.com/Bronya0/ES-King 我之前开源的kafka客户端kafka-ki ...
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Live View Kit (3)
1.问题描述: 通过Push Kit创建实况窗之后,再更新实况窗失败,平台查询提示"实况窗端更新失败,通知未创建或已经过期". 解决方案: 通过Push Kit更新实况窗内容的过程 ...
- HashMap的数据结构和源码分析
如果想透彻理解什么是HashMap,首先需要知道HashMap的数据结构是什么:其次需要厘清它能做什么,即它的功能:最后,还需要知道HashMap怎么实现这些功能的.下面我们针对这三个方面展开剖析. ...
- RAG越来越不准?一文详解元数据与标签的系统优化方法(附完整流程图+实用提示词)
你是不是也遇到过这样的场景? 公司刚花大钱上线AI知识库,结果AI助手总是"答非所问",文档明明都上传了,关键时刻还是找不到想要的答案: 苦心搭了一两个月RAG系统,老板随便一问, ...
- 基于TCP实现简单的聊天室
原文出处:<Go 语言编程之旅>第四章4.1节 基于TCP的聊天室 1.服务端 新用户到来,生成一个User的实例,代表该用户. type User struct{ ID int // 用 ...
- 图神经网络(GNN)模型的基本原理
一.概述 在人工智能领域,数据的多样性促使研究人员不断探索新的模型与算法.传统的神经网络在处理像图像.文本这类具有固定结构的数据时表现出色,但面对具有不规则拓扑结构的图数据,如社交网络.化学分子结 ...