Description

题面

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

Solution

如果 \(L_i->R_i+1\) 连边

染色就变成了定向,那么一个点要被从左往右和从右往左经过的次数的绝对值之差不超过 \(1\)

发现一个环就是符合要求的,那么我们就可以试图找一个欧拉回路

考虑奇度点的处理:

我们把相邻的奇度点连起来就可以了

因为某些有交的区间并没有连边,我们用奇度点之间的边把他们连起来,这样就可以构成欧拉回路了

然后我们只需要把从左往右的边标为红色,从右往左的边标为蓝色即可

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int n,in[N],head[N],nxt[N<<1],to[N<<1],num=1,b[N],cnt=0,m;
int lis[N],tot=0,q[N],top=0,fr[N<<1],id[N<<1];bool vis[N],v[N<<1],ans[N];
inline void link(int x,int y,int ID){
nxt[++num]=head[x];to[num]=y;head[x]=num;fr[num]=x;id[num]=ID;
}
struct sub{int x,y;}e[N];
inline void dfs(int x){
vis[x]=1;
for(int i=head[x];i;i=nxt[i]){
head[x]=nxt[i];
if(v[i])continue;
v[i^1]=1;dfs(to[i]);q[++top]=i;
}
}
int main(){
int x,y;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&x,&y);
b[++cnt]=x;b[++cnt]=y+1;
e[i]=(sub){x,y+1};
}
sort(b+1,b+cnt+1);m=unique(b+1,b+cnt+1)-b-1;
for(int i=1;i<=n;i++){
x=e[i].x;y=e[i].y;
x=lower_bound(b+1,b+m+1,x)-b;
y=lower_bound(b+1,b+m+1,y)-b;
link(x,y,i);link(y,x,i);in[x]++;in[y]++;
}
for(int i=1;i<=m;i++)if(in[i]&1)lis[++tot]=i;
for(int i=1;i<=tot;i+=2)link(lis[i],lis[i+1],0),link(lis[i+1],lis[i],0);
for(int i=1;i<=m;i++)
if(!vis[i])dfs(i);
while(top){
if(id[q[top]])
ans[id[q[top]]]=(fr[q[top]]<to[q[top]]);
top--;
}
for(int i=1;i<=n;i++)printf("%d ",ans[i]);
return 0;
}

Codeforces 429E Points and Segments的更多相关文章

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

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

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

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

  3. codeforces 430A Points and Segments (easy)(理解能力有待提高……)

    题目 //终于看懂题目了,,,, //一条线段里面不是每个坐标上都有要染色的点,所以为了满足条件,只能考虑那些给出坐标的点 //所以就要排序一下了,不能直接根据坐标0 1 0 1…… #include ...

  4. CodeForces 430A Points and Segments (easy)(构造)题解

    题意:之前愣是没看懂题意...就是给你n个点的坐标xi,然后还规定了Li,Ri,要求给每个点染色,每一组L,R内的点红色和黑色的个数不能相差大于1个,问你能不能染成功,不能输出-1,能就按照输入的顺序 ...

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

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

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

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

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

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

  9. CF429E Points and Segments

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

随机推荐

  1. 事后诸葛亮分析——Beta版本

    事后诸葛亮分析 请两个小组在Deadline之前,召开事后诸葛亮会议,发布一篇事后分析报告. 软件工程课的目的,主要是让大家通过做项目,学到软件工程的知识,而不是低水平重复. 软件=程序+软件工程,软 ...

  2. Python实现网站模拟登陆

    一.实验简介 1.1 基本介绍 本实验中我们将通过分析登陆流程并使用 Python 实现模拟登陆到一个实验提供的网站,在实验过程中将学习并实践 Python 的网络编程,Python 实现模拟登陆的方 ...

  3. Oracle查询用户权限

    Oracle查询用户权限 -- 确定角色的权限select * from role_tab_privs ;              包含了授予角色的对象权限select * from role_ro ...

  4. selenium webdriver API

    元素定位 #coding=utf-8 from selenium import webdriver from selenium.webdriver.firefox.firefox_binary imp ...

  5. TensorFlow-谷歌深度学习库 手把手教你如何使用谷歌深度学习云平台

    自己的电脑跑cnn, rnn太慢? 还在为自己电脑没有好的gpu而苦恼? 程序一跑一俩天连睡觉也要开着电脑训练? 如果你有这些烦恼何不考虑考虑使用谷歌的云平台呢?注册之后即送300美元噢-下面我就来介 ...

  6. vue-router 组件实例被复用问题

    最近在开发过程中遇到如下问题: 当前路由是这样的 http://127.0.0.1:3010/order?keywords=22 只改变keywords的值,路由不跳转 http://127.0.0. ...

  7. Something about SeekingJob---Resume简历

    这几天脑子里满满的装的都是offer.offer.offer快到碗里来,但是offer始终不是巧克力,并没那么甜美可口易消化. 找工作刚开始,就遇到了不小的阻力,看到Boss直聘上各种与IT相关的工作 ...

  8. Vue.js自己从官网整理的东东

    1.采用简洁的模板语法来声明渲染数据: <div id="app"> {{ message }} </div> var app = new Vue({ el ...

  9. python 人工智能资源推荐

    原创 2017-06-05 玄魂工作室 玄魂工作室 我翻了翻我自己曾经看过的书,还是放弃了推荐.原因很简单,我对这个领域并不是很熟悉,我来推荐资源有点误人子弟.so,简单推点其他人建议给我的内容,希望 ...

  10. 使用 vi 命令

    一.vi是什么 vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器. Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实 ...