Agc017_E Jigsaw
题目大意
有$n$块拼图,每一块都由左中右三个部分组成,每块拼图中间部分是高为$H$的长方形,对于第$i$块品推左侧是高为$A_i$距离底部为$C_i$的长方体,右侧是高位$B_i$距底部为$D_i$的长方体。

其中每块拼图每个部分都是等宽的
现在让你将这$n$个拼图一次摆在一条直线上方,满足每块拼图中部底端要紧贴直线,并且直线以上不存在一个区域,使得该区域没有被拼图覆盖且该区域上方有区域被拼图覆盖。
$n\leq 10^5,H\leq 10^5$
题解
神仙题。
由于这道题只关心,每一块左右部分与地面直线相邻的部分是空还是实心的,并且有多高。
一侧高为$k$的实心可以和另一侧高位$k$的空心相接,不妨把这看作是一个点。
设左侧高为$k$的实心或右侧高位$k$的空心是标号为$-k$的点。
设左侧高为$k$的空心或右侧高位$k$的实心是标号为$k$的点。
把每块积木看做是一条有向边,于是问题转化为能否找到若干条路径$(S\rightarrow T)$,使得$S<0,T>0$。
那么对于每一个点$x$,记它的入度出度为$I_x,O_x$,它要么被经过$(I_x++,O_x++)$,要么作为起点或终点之一$I_x++(x>0)$或$O_x++(x<0)$。
所以若方案可行,一定满足对于所有的点
当$x<0$时,$I_x\leq O_x$。
当$x>0$时,$I_x\geq O_x$。
此外,对于每一个若连通分量,至少有一个起点和一个终点,而出现起点就一定会出现终点,所以只需要再特判每一个包含至少一条边的若弱连通分量中出现一个$I_x\ne O_x$的点即可。
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define M 500
using namespace std;
int read(){
int nm=0,fh=1; int cw=getchar();
for(;!isdigit(cw);cw=getchar()) if(cw=='-') fh=-fh;
for(;isdigit(cw);cw=getchar()) nm=nm*10+(cw-'0');
return nm*fh;
}
int n,m,e1,e2,h1,h2,cnt,in[M],ot[M],f[M]; bool vs[M];
int fd(int x){return x==f[x]?x:f[x]=fd(f[x]);}
int main(){
n=read(),m=read();
for(int i=1;i<=m;i++) f[i]=i,f[i+m]=i+m,vs[i]=vs[i+m]=false;
for(int i=1;i<=n;i++){
h1=read(),h2=read(),e1=read(),e2=read();
int t1=e1>0?e1:-h1,t2=e2>0?-e2:h2; t1+=m,t2+=m;
if(fd(t1)!=fd(t2)) f[fd(t1)]=fd(t2); in[t2]++,ot[t1]++;
}
for(int i=-m;i<0;i++) if(in[i+m]>ot[i+m]){puts("NO");return 0;}
for(int i=1;i<=m;i++) if(in[i+m]<ot[i+m]){puts("NO");return 0;}
for(int i=0;i<=m+m;i++) if(in[i]!=ot[i]) vs[fd(i)]=true;
for(int i=0;i<=m+m;i++) if(in[i]&&ot[i]&&!vs[fd(i)]){puts("NO");return 0;}
puts("YES"); return 0;
}
Agc017_E Jigsaw的更多相关文章
- Java 9终于要包含Jigsaw项目了
当Jigsaw在Java 9中最终发布时,这个项目的历史已经超过八年了. 转载于:http://www.itxuexiwang.com/a/liunxjishu/2016/0228/180.html? ...
- [CareerCup] 8.6 Jigsaw Puzzle 拼图游戏
8.6 Implement a jigsaw puzzle. Design the data structures and explain an algorithm to solve the puzz ...
- 借助 Java 9 Jigsaw,如何在 60 秒内创建 JavaFX HelloWorld 程序?
[编者按]本文作者为 Carl Dea,主要介绍利用 Jigsaw 项目在大约一分钟内编写标准化的"Hello World"消息代码.本文系国内 ITOM 管理平台 OneAPM ...
- 针对Jigsaw勒索软件的解锁工具
针对Jigsaw勒索软件的解锁工具 据了解, 用户的计算机系统一旦感染了勒索软件Jigsaw,如果用户没有在一个小时之内支付赎金(0.4个比特币,价值约为150美金),那么恶意软件将会把系统中的上千份 ...
- [Elite 2008 Dec USACO]Jigsaw Puzzles
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #def ...
- Java9模块化(Jigsaw)初识
Java9经历了多次跳票,终于要在9月份正式发布,原计划Jigsaw在Java7就有的,也终于在Java9里面提供了,简单总结下. 对比 Java9 以前 上面2个图分别对应的分别是JDK8/9的目录 ...
- Java9 modules (Jigsaw)模块化迁移
要点 通过模块化的方式开发应用程序,实现更好的设计,如关注点分离和封装性. 通过Java平台模块化系统(JPMS),开发者可以定义他们的应用程序模块,决定其他模块如何调用他们的模块,以及他们的模块如何 ...
- Jigsaw 项目:Java 模块系统新手引导
前言 随着 2017 年 10 月 Java 9 的发布,Java 能够使用模块系统了,但是中文互联网上的资料太少,许多关于 Java 模块系统的文章都只是介绍了模块系统的好处,或者给了一些毫无组织的 ...
- java9新特性-4-模块化系统: Jigsaw与Modularity
1.官方Feature 200: The Modular JDK 201: Modular Source Code 220: Modular Run-Time Images 260: Encapsul ...
随机推荐
- PHP-Manual的学习----【语言参考】----【类型】-----【array数组】
1.Array 数组 PHP 中的 数组 实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是 ...
- python爬虫学习研究
目标:做一个小爬虫项目 2017年6月4日13:32:17 mooc网教程Python爬虫入门一之综述要学习Python爬虫,我们要学习的共有以下几点:Python基础知识Python中u ...
- HDU 2588 GCD && GCD问题总结
GCD(一) 题目: The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes written ( ...
- [原创]关于absolute、relative和float的一些思考
absolute: 元素完全脱离文档流,不占文档流的位置,不使用top.left等属性时,仍然在原文档流位置上(但是不在文档流中,也不占用位置),设置了top.left等之后,向上寻找到第一个非sta ...
- java servlet中上传文件的简单实现(基于第三方jar)
这里的案例使用了两种文件上传的组件.分别介绍 1.使用JSPSmartUpload完成上传 package test_servlet_package; import java.io.File; imp ...
- 反应器模式 vs 生产者消费者模式
相似点: 从结构上,反应器模式有点类似生产者消费者模式,即有一个或多个生产者将事件放入一个Queue中,而一个或多个消费者主动的从这个Queue中Poll事件来处理: 不同点: Reactor模式则并 ...
- php数据类型的true和false
- window 上创建 .gitignore文件
由于 git默认不上传空文件夹,如果需要上传空文件夹,那么需要这样上传空文件,官方给出这样的做法~~ (需要创建.gitignore文件) 在linux 上比较好操作了,这里说下在window 上 创 ...
- 【整理学习Hadoop】Hadoop学习基础之一:服务器集群技术
服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器.集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任 ...
- LeetCode:盛最多水的容器【11】
LeetCode:盛最多水的容器[11] 题目描述 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 ...