传送门

题目大意

有$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的更多相关文章

  1. Java 9终于要包含Jigsaw项目了

    当Jigsaw在Java 9中最终发布时,这个项目的历史已经超过八年了. 转载于:http://www.itxuexiwang.com/a/liunxjishu/2016/0228/180.html? ...

  2. [CareerCup] 8.6 Jigsaw Puzzle 拼图游戏

    8.6 Implement a jigsaw puzzle. Design the data structures and explain an algorithm to solve the puzz ...

  3. 借助 Java 9 Jigsaw,如何在 60 秒内创建 JavaFX HelloWorld 程序?

    [编者按]本文作者为 Carl Dea,主要介绍利用 Jigsaw 项目在大约一分钟内编写标准化的"Hello World"消息代码.本文系国内 ITOM 管理平台 OneAPM ...

  4. 针对Jigsaw勒索软件的解锁工具

    针对Jigsaw勒索软件的解锁工具 据了解, 用户的计算机系统一旦感染了勒索软件Jigsaw,如果用户没有在一个小时之内支付赎金(0.4个比特币,价值约为150美金),那么恶意软件将会把系统中的上千份 ...

  5. [Elite 2008 Dec USACO]Jigsaw Puzzles

    #include <iostream> #include <cstdio> #include <cstring> using namespace std; #def ...

  6. Java9模块化(Jigsaw)初识

    Java9经历了多次跳票,终于要在9月份正式发布,原计划Jigsaw在Java7就有的,也终于在Java9里面提供了,简单总结下. 对比 Java9 以前 上面2个图分别对应的分别是JDK8/9的目录 ...

  7. Java9 modules (Jigsaw)模块化迁移

    要点 通过模块化的方式开发应用程序,实现更好的设计,如关注点分离和封装性. 通过Java平台模块化系统(JPMS),开发者可以定义他们的应用程序模块,决定其他模块如何调用他们的模块,以及他们的模块如何 ...

  8. Jigsaw 项目:Java 模块系统新手引导

    前言 随着 2017 年 10 月 Java 9 的发布,Java 能够使用模块系统了,但是中文互联网上的资料太少,许多关于 Java 模块系统的文章都只是介绍了模块系统的好处,或者给了一些毫无组织的 ...

  9. java9新特性-4-模块化系统: Jigsaw与Modularity

    1.官方Feature 200: The Modular JDK 201: Modular Source Code 220: Modular Run-Time Images 260: Encapsul ...

随机推荐

  1. HDU 2588 GCD &amp;&amp; GCD问题总结

    GCD(一) 题目: The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes written ( ...

  2. 【BZOJ3105】[cqoi2013]新Nim游戏 贪心+线性基

    [BZOJ3105][cqoi2013]新Nim游戏 Description 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个 ...

  3. [转]linux terminal中使用proxy

    转自:http://www.cnblogs.com/JoJosBizarreAdventure/p/5892383.html 在linux terminal中使用代理 方法一: terminal中输入 ...

  4. 九度OJ 1338:角斗士 (递归、DP)

    时间限制:3 秒 内存限制:32 兆 特殊判题:否 提交:213 解决:66 题目描述: 角斗士是古罗马奴隶社会的一种特殊身份的奴隶,他们的职责是在角斗场上进行殊死搏斗,为了人们提供野蛮的娱乐.他们的 ...

  5. why factory pattern and when to use factory pattern

    1 factory pattern本质上就是对对象创建进行抽象 抽象的好处是显然的,可以方便用户去获取对象. 2 使用factory pattern的时机 第一,当一个对象的创建依赖于其它很多对象的时 ...

  6. TensorFlow_action

    安装TensorFlow  包依赖 C:\Users\sas> pip3 install --upgrade tensorflow Collecting tensorflow Downloadi ...

  7. 【python】-- web开发之JavaScript

    JavaScript JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理. ...

  8. python实例1:创建一个登陆模块

    实现功能: 1.用户输入账户密码 2.验证账户是否存在于黑名单,如果存在于黑名单,则执行1,否则往下执行 3.验证用户名和密码. 3.1.如果验证成功,则打印欢迎信息并退出程序: 3.2.如果用户名存 ...

  9. 中国移动OneNet平台上传GPS数据JSON格式

    最终目的输出 POST /devices/3225187/datapoints HTTP/1.1 api-key: R9xO5NZm6oVI4YBHvCPKEqtwYtMA Host: api.hec ...

  10. QT修改应用程序图标

    要准备一个ico的图标,必须是ico格式,切记!! 可以用png或者其他的在线转换:http://www.easyicon.net/covert/ 用记事本 新建文件icon.rc,内容为: IDI_ ...