传送门


如果把一条线段\([l,r]\)看成一条无向边\((l,r+1)\),从\(l\)走到\(r+1\)表示线段\([l,r]\)染成红色,从\(r+1\)走到\(l\)表示线段\([l,r]\)染成蓝色,那么题目等价于给每一条边定下方向,使得对于所有点,从左往右经过的次数和从右往左经过的次数差的绝对值不超过\(1\)。

对于直线上所有奇数度的点,从左往右两两配对,那么就是要求对于所有的点从左往右经过的次数等于从右往左经过的次数。不难想到这是一个欧拉图。求解欧拉回路给边定向即可。

注意直线上的奇数度的点不能随意配对,因为如果对于\(A<B<C<D\)四个奇数入度的点,连\((A,D)\)\((B,C)\),而找到的欧拉回路方案中边的方向为\(A \rightarrow D , B \rightarrow C\),那么在这两条边去掉之后线段\([B,C]\)从左往右的次数比从右往左的次数少\(2\),就不符合题意了。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iomanip>
#include<set>
#include<vector>
//This code is written by Itst
using namespace std; inline int read(){
int a = 0;
char c = getchar();
while(!isdigit(c))
c = getchar();
while(isdigit(c)){
a = a * 10 + c - 48;
c = getchar();
}
return a;
} #define PII pair < int , int >
const int MAXN = 2e5 + 7;
multiset < PII > Edge[MAXN];
int lsh[MAXN] , in[MAXN] , N , cntL;
vector < PII > tmp;
bool col[MAXN]; void dfs(int x){
for(auto t = Edge[x].begin() ; !Edge[x].empty() ; t = Edge[x].begin()){
int a = t->first , b = t->second;
Edge[x].erase(t);
Edge[a].erase(Edge[a].find(PII(x , -b)));
if(b > 0) col[b] = 1;
dfs(a);
}
} int main(){
#ifndef ONLINE_JUDGE
freopen("in","r",stdin);
//freopen("out","w",stdout);
#endif
N = read();
for(int i = 1 ; i <= N ; ++i){
int a = read() , b = read() + 1;
tmp.push_back(PII(a , b));
lsh[++cntL] = a; lsh[++cntL] = b;
}
sort(lsh + 1 , lsh + cntL + 1);
cntL = unique(lsh + 1 , lsh + cntL + 1) - lsh - 1;
for(int i = 0 ; i < N ; ++i){
int p = lower_bound(lsh + 1 , lsh + cntL + 1 , tmp[i].first) - lsh , q = lower_bound(lsh + 1 , lsh + cntL + 1 , tmp[i].second) - lsh;
Edge[p].insert(PII(q , i + 1));
Edge[q].insert(PII(p , -i - 1));
in[p] ^= 1; in[q] ^= 1;
}
int pre = 0;
for(int i = 1 ; i <= cntL ; ++i)
if(in[i])
if(!pre) pre = i;
else{
Edge[pre].insert(PII(i , 0));
Edge[i].insert(PII(pre , 0));
++in[pre]; ++in[i];
pre = 0;
}
for(int i = 1 ; i <= cntL ; ++i)
if(!Edge[i].empty())
dfs(i);
for(int i = 1 ; i <= N ; ++i)
cout << col[i] << ' ';
return 0;
}

CF429E Points and Segments 构造、欧拉回路的更多相关文章

  1. 【CF429E】Points and Segments(欧拉回路)

    [CF429E]Points and Segments(欧拉回路) 题面 CF 洛谷 题解 欧拉回路有这样一个性质,如果把所有点在平面内排成一行,路径看成区间的覆盖,那么每个点被从左往右的覆盖次数等于 ...

  2. CF429E Points and Segments

    链接 CF429E Points and Segments 给定\(n\)条线段,然后给这些线段红蓝染色,求最后直线上上任意一个点被蓝色及红色线段覆盖次数之差的绝对值不大于\(1\),构造方案,\(n ...

  3. 【CF429E】 Points and Segments(欧拉回路)

    传送门 CodeForces 洛谷 Solution 考虑欧拉回路有一个性质. 如果把点抽出来搞成一条直线,路径看成区间覆盖,那么一个点从左往右被覆盖的次数等于从右往左被覆盖的次数. 发现这个性质和本 ...

  4. Codeforces 429E - Points and Segments(欧拉回路)

    Codeforces 题面传送门 & 洛谷题面传送门 果然我不具备融会贯通的能力/ll 看到这样的设问我们可以很自然地联想到这道题,具体来说我们可以通过某种方式建出一张图,然后根据" ...

  5. 【CF429E】Points and Segments 欧拉回路

    [CF429E]Points and Segments 题意:给你数轴上的n条线段$[l_i,r_i]$,你要给每条线段确定一个权值+1/-1,使得:对于数轴上的任一个点,所有包含它的线段的权值和只能 ...

  6. [CF429E]Points ans Segments_欧拉回路

    Points and Segments 题目链接:www.codeforces.com/contest/429/problem/E 注释:略. 题解: 先离散化. 发现每个位置如果被偶数条线段覆盖的话 ...

  7. Codeforces Round #245 (Div. 2) A. Points and Segments (easy) 贪心

    A. Points and Segments (easy) Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/con ...

  8. 『ACM C++』 Codeforces | 1066A - Points in Segments

    大一生活真 特么 ”丰富多彩“ ,多彩到我要忙到哭泣,身为班长,很多班级的事情需要管理,也是,什么东西都得体验学一学,从学生会主席.团委团总支.社团社长都体验过一番了,现在差个班长也没试过,就来体验了 ...

  9. Codeforces Round #501 (Div. 3) 1015A Points in Segments (前缀和)

    A. Points in Segments time limit per test 1 second memory limit per test 256 megabytes input standar ...

随机推荐

  1. 我的第一个远程代码库房:建立Github仓库 心得

    一直想有一个自己的代码库,搞了两天终于搞定了,把自己的代码上传到github的愿望终于实现了,虽然仅仅是个开始. 在搭建的过程中,吸收了些知识,记录在这里,以作为分享. Git 和 Github 的区 ...

  2. spark大批量读取Hbase时出现java.lang.OutOfMemoryError: unable to create new native thread

    这个问题我去网上搜索了一下,发现了很多的解决方案都是增加的nproc数量,即用户最大线程数的数量,但我修改了并没有解决问题,最终是通过修改hadoop集群的最大线程数解决问题的. 并且网络上的回答多数 ...

  3. Spark集群搭建【Spark+Hadoop+Scala+Zookeeper】

    1.安装Linux 需要:3台CentOS7虚拟机 IP:192.168.245.130,192.168.245.131,192.168.245.132(类似,尽量保持连续,方便记忆) 注意: 3台虚 ...

  4. springmvc复习笔记----springmvc最简单的第一个例子:RequestMapping试水

    结构 用到的包 web.xml <url-pattern>/</url-pattern>中可以换成其他的后缀*.do ,*. sb  …… <?xml version=& ...

  5. 个人对于 Maven 的理解

    个人对于 Maven 的理解 Maven 一直都在使用, 但如果说是不是真的懂 Maven, 很难谈得上. 或许什么时候系统地学习一下, 但在那之前, 打算先记下自己目前对于 Maven 的理解, 之 ...

  6. Python:decorator [转]

    Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数. def sa ...

  7. 管理ESXI网络

    一.实验拓扑图: 二.实验目标:部署标准交换机和分布式交换机 三.实验步骤: 标准交换机的配置 1.分别在两台esxi主机中添加6块物理网卡,桥接到vmnet1. 通过宿主机连接到sql-vcente ...

  8. 【算法】LeetCode算法题-Search Insert Position

    这是悦乐书的第152次更新,第154篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第11题(顺位题号是35).给定排序数组和目标值,如果找到目标,则返回索引. 如果没有, ...

  9. 【文学文娱】《屌丝逆袭》-出任CEO、迎娶白富美、走上人生巅峰

    本文地址:http://www.cnblogs.com/aiweixiao/p/7759790.html 原文地址:(微信公众号) 原创 2017-10-30 微信号wozhuzaisi 程序员的文娱 ...

  10. ArcMap2Sld:一个将MXD中图层配图样式转换为OGC的SLD文件的开源工具

    在一个项目中,用户采用GeoServer做为GIS服务器(原因嘛当然是免费能省钱,经过验证可能还会在性能和稳定性等表现力也有优越性),但是手上收集的数据都是ESRI格式的,这倒不打紧,因为GeoSer ...