AT2644 [ARC076C] Connected?
可以发现这个问题是存在边界的,那么我们可以先放宽一下条件思考一下没有边界的情况。
通过手玩可以发现,若不存在边界总是可以完成这个任务的。
因为两条曲线之间不存在交点,那么每次我们可以从空隙穿过一条直线然后一直绕道另一端。
那么存在边界的情况特殊在一条两个点都在边界上的曲线会将整个矩形划分成两个部分,而此时若两个部分还存在点没有连接就不合法了。
但是,如果这条曲线不全是两个端点都在边界上,那么我们先将其连接对两个端点都在边界上的曲线是不会影响的,一样可以通过缝隙绕道。
那么此时只需要考虑两个端点都在边界上的曲线了。
不难发现,此时合法当且仅当不存在一条曲线将矩形分成两个区域后存在两个端点在不同区域,即不存在两条有端点连成的线段会相交。
因为每条线段都只存在于边界上,可以考虑将二维的矩形变成一维的由边界展开变成的一条线段。
那么此时原图上的线段就会变成新线段上的若干个区间。
可以发现合法的条件当且仅当这些区间只有包含和相离关系。
于是只需要从左往右扫一遍开个栈做一遍括号匹配即可。
#include <bits/stdc++.h>
using namespace std;
#define rep(i, l, r) for (int i = l; i <= r; ++i)
const int N = 2e5 + 5;
struct node { int x, y, id;} a[N];
int n, m, h, w, x, y, xx, yy, top, st[N], book[N];
bool check(int x, int y) { return (!x || !y || (x == h) || (y == w));}
bool cmp(node a, node b) {
if(a.y == w) return (b.y < w || b.x > a.x);
if(a.x == h) return (b.y != w && (b.x < h || b.y < a.y));
if(!a.y) return (b.y != w && b.x != h && (!b.x || b.x < a.x));
if(!a.x) return (b.y != w && b.x != h && b.y && b.y > a.y);
}
int main () {
cin >> h >> w >> m;
rep(i, 1, m) {
cin >> x >> y >> xx >> yy;
if(!check(x, y) || !check(xx, yy)) continue ;
a[++n] = (node){x, y, i}, a[++n] = (node){xx, yy, i};
}
sort(a + 1, a + n + 1, cmp);
rep(i, 1, n) {
if(book[a[i].id]) {
if(a[st[top]].id != a[i].id) { puts("NO"); return 0;}
else --top;
}
else st[++top] = i, book[a[i].id] = 1;
}
puts("YES");
return 0;
}
可以发现,先放宽条件是一个当条件非常多的时候对一道题下手的一个良好方法。
其次,当某些平面 / 三维空间上只涉及边界时,可以考虑降维将边界拆成一条连续的线段然后在序列上完成这个问题。
AT2644 [ARC076C] Connected?的更多相关文章
- [LeetCode] Number of Connected Components in an Undirected Graph 无向图中的连通区域的个数
Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), ...
- PTA Strongly Connected Components
Write a program to find the strongly connected components in a digraph. Format of functions: void St ...
- poj 1737 Connected Graph
// poj 1737 Connected Graph // // 题目大意: // // 带标号的连通分量计数 // // 解题思路: // // 设f(n)为连通图的数量,g(n)为非连通图的数量 ...
- LeetCode Number of Connected Components in an Undirected Graph
原题链接在这里:https://leetcode.com/problems/number-of-connected-components-in-an-undirected-graph/ 题目: Giv ...
- Windows Phone 8 解锁提示IpOverUsbSvc问题——IpOverUsbEnum返回No connected partners found解决方案
我的1520之前总是无法解锁,提示:IpOverUsbSvc服务没有开启什么的. 根据网上网友的各种解决方案: 1. 把手机时间设置为当前时间,并且关闭“自动设置” 2. 确保手机接入了互联网 3.确 ...
- POJ1737 Connected Graph
Connected Graph Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3156 Accepted: 1533 D ...
- [LintCode] Find the Weak Connected Component in the Directed Graph
Find the number Weak Connected Component in the directed graph. Each node in the graph contains a ...
- Supporting Connected Routes to Subnet Zero
Supporting Connected Routes to Subnet Zero IOS allows the network engineer to tell a router to eithe ...
- lintcode:Find the Connected Component in the Undirected Graph 找出无向图汇总的相连要素
题目: 找出无向图汇总的相连要素 请找出无向图中相连要素的个数. 图中的每个节点包含其邻居的 1 个标签和 1 个列表.(一个无向图的相连节点(或节点)是一个子图,其中任意两个顶点通过路径相连,且不与 ...
随机推荐
- vue使用自定义指令v-dialogDrag来控制element ui中el-dialog的拖动缩放,拉伸问题
1 在vue的utils中新建一个dialogDrag.js import Vue from 'vue' Vue.directive('dialogDrag', { bind(el, binding, ...
- 【jvm】07-偏向锁、轻量锁、重量锁到底是啥?
[jvm]07-偏向锁.轻量锁.重量锁到底是啥? 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮助到你的话请顺 ...
- 生成对抗网络GAN与DCGAN的理解
作者在进行GAN学习中遇到的问题汇总到下方,并进行解读讲解,下面提到的题目是李宏毅老师机器学习课程的作业6(GAN) 一.GAN 网络上有关GAN和DCGAN的讲解已经很多,在这里不再加以赘述,放几个 ...
- Python项目生成requirements.txt文件及pip升级问题解决及流程
缘由:新项目使用Python, PC上的python包不全,需要通过requirements.txt文件指定安装所需包 pip安装遇到一些坑 一.直接使用pip包管理工具生成requirements. ...
- [GDOI2021 Day2T1] 宝石
题目大意 \(n\)个点的树, 树上每一个点有一个宝石\(w_i\), 给出一个固定的数字不重复的序列\(p_i\)和一些询问\(u_i, v_i\), 对于每一个询问求出\(u_i\)到\(v_i\ ...
- python + pymysql连接数据库报“(2003, "Can't connect to MySQL server on 'XXX数据库地址' (timed out)")”
python + pymysql连接数据库报"(2003, "Can't connect to MySQL server on 'XXX数据库地址' (timed out)&quo ...
- JMeter_请求header
在接口调试的时候,请求参数确认正确无误,但是请求失败! 通过对比header,发现header缺少一些字段(token)以及传入的值不正确(Content-Type) 增加这些字段信息后,接口调试成功 ...
- Redhat 如何使用yum 源(转)
1.需要把Redhat注册的信息给解决掉 This system is not registered with an entitlement server. You can use subscript ...
- 《剑指offer》面试题32 - I. 从上到下打印二叉树
问题描述 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回 ...
- Java高效开发-远程debug
1.前言 "这怎么回事?在本地还好好,放到服务器就不行了.这该怎么排查,日志也看不出来啥呀",日常开发中经常会出现这种问题,这时候就可以尝试idea远程debug的模式试试 2.使 ...