题解:

方法非常巧妙的一道题

首先考虑要求全部为0怎么做

发现是个欧拉回路的问题(很巧妙)

直接dfs一遍就可以了

而这道题

要求是-1,1,0

我们可以先离散化

完了之后判断每个点被奇数还是偶数条边覆盖

如果是奇数,那么就多连一条边

另外有个细节是为了要用欧拉回路区间左开右闭

代码:

#include <bits/stdc++.h>
using namespace std;
const int N=4e5;
const int INF=1e9+;
int n,cnt[N],rd[N],b[N],head[N],l1;
struct re{
int a,b,c,w;
}a[N],e[N*];
bool cmp(re x,re y)
{
return(x.a<y.a);
}
void arr(int x,int y)
{
e[++l1].a=head[x];
e[l1].b=y;
head[x]=l1;
e[l1].c=;
rd[x]++;
}
void dfs(int x)
{
int u=head[x];
while (u)
{
int v=e[u].b;
if (e[u].c)
{
e[u].c=; e[((u-)^)+].c=;
if (x<v) e[u].w=; else e[u].w=;
e[((u-)^)+].w=e[u].w;
dfs(v);
}
u=e[u].a;
}
}
int main()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n;
for (int i=;i<=n;i++)
{
int li,ri;
cin>>li>>ri;
a[i*-].a=li; a[i*].a=ri;
a[i*-].b=i*-; a[i*].b=i*;
}
sort(a+,a+n*+,cmp);
a[].a=-INF; int l=;
for (int i=;i<=n*;i++)
{
if (a[i].a!=a[i-].a)
if (a[i].a==a[i-].a+) l++;
else l+=;
b[a[i].b]=l;
}
for (int i=;i<=n;i++)
cnt[b[i*-]]++,cnt[b[i*]+]--;
int ans=;
for (int i=;i<=l;i++)
{
ans+=cnt[i];
if (ans%) arr(i,i+),arr(i+,i);
}
int l2=l1+;
for (int i=;i<=n;i++)
arr(b[i*-],b[i*]+),arr(b[i*]+,b[i*-]);
for (int i=;i<=l;i++)
if (rd[i]%)
{
cout<<"-1";
exit();
}
for (int i=;i<=l+;i++)
{
dfs(i);
}
while (l2<=l1)
{
cout<<e[l2].w<<" ";
l2+=;
}
return ;
}

A - Points and Segments CodeForces - 429E的更多相关文章

  1. 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 ...

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

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

  3. 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 ...

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

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

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

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

  6. D - Nested Segments CodeForces - 652D (离散化+树桩数组)

    D - Nested Segments CodeForces - 652D You are given n segments on a line. There are no ends of some ...

  7. CF429E Points and Segments

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

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

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

  9. Codeforces 429E Points and Segments

    Description 题面 题目大意:有 \(n\) 个区间 \([L_i,R_i]\) ,你要给每一个区间染红蓝,使得每一个位置被红色染过的次数与被蓝色染过的次数差的绝对值不大于\(1\) Sol ...

随机推荐

  1. struts2框架之重复提交问题

    防止重复提交 1. 什么是重复提交 * 提交表单时,点击一次后,页面没有刷新时,马上又点击一次,就是重复提交 * 提交后,通过浏览器的回退,又回到了表单页面,再次提交 * 提交后,按F5刷新,也是重复 ...

  2. ansible笔记(2):清单配置详解

    上一篇文章介绍了ansible的基本概念,以及相关的基础配置,我们已经知道,如果想要管理受管主机,则需要将受管主机添加到ansible的管理清单中,当安装ansible以后,会提供一个默认的管理清单, ...

  3. centos7编译安装lnmp

    1.前言 本文适合于已经对Linux操作系统具有基本操作经验,并且能够在Linux或Windows上通过一键搭建工具或者yum命令行进行环境搭建的读者,阅读本文需具有一定的专业知识,本文不建议初学者阅 ...

  4. 39)django-XSS 过滤

    使用kingedit别人是可以输入script代码.这在后台是不允许script代码运行的. 这里主要使用beatifulSoup过滤 示例1 beatufulsoup4 from bs4 impor ...

  5. Elasticsearch入门,这一篇就够了

    实时搜索引擎Elasticsearch Elasticsearch(简称ES)是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进 ...

  6. Android 设备的CPU类型(通常称为”ABIs”)

    armeabiv-v7a: 第7代及以上的 ARM 处理器.2011年15月以后的生产的大部分Android设备都使用它. arm64-v8a: 第8代.64位ARM处理器,很少设备,三星 Galax ...

  7. springboot第一个项目【mybatis】

    1.resources下添加spring 添加spring-context.xml,设置controller的路径,以及引入数据库配置 <beans xmlns="http://www ...

  8. Swift 学习- 05 -- 集合类型

    // 集合类型 // swift 提供 Arrays , Sets 和 Dictionaries 三种基本的集合类型用来存储数据 , 数组(Arrays) 是有序数据的集, 集合(Sets)是无序无重 ...

  9. Confluence 6 订阅所应用的所有小工具

    你可以从你的 Jira, Bamboo,FishEye 或 Crucible 站点中订阅所有的小工具到你的 Confluence 小工具目录中.用户可以为他们的页面查找和选择小工具. 希望订阅其他站点 ...

  10. Linux下vsftpd的安装,Java上传文件实现。

    首先我们需要查看是否已经安装vsftpd,输入命令 :vsftpd  -v.如果出现以下信息,那么就说明已经安装vsftpd 如果没有安装,那么输入命令   : yum  install vsftpd ...