题意:给定n<=100000线段[l,r],然后给这些线段染色(red or blue),求最后平面上任意一个点被蓝色及红色覆盖次数只差的绝对值不大于1

思路:把每条线段拆成2个点[l<<1, r<<1|1]来表示,

那么如果把染red看成1,blue看成-1

那么对于每条线段染色为v(-1 or 1),等价于l<<1点为v,r<<1|1为-v,

则题目等价于求一种合法的方案使得任意点的abs(前缀和S)<=1

此外,由于任一点取值为 -1 or 1,并且过程中abs(S)<=1,所以任意奇数位置(下标从0开始)的前缀和为0

所以转化为图论模型,就是经典的二分图染色模型:

对于每个线段两端连一条边;

对于排序后相邻的(i<<1, i <<1|1)连一条边,

又由于图的特殊性不会出现奇数环。。

因为对于任意的一个点,只有两条边,并且这两条边类型不同,不妨设为A和B。

那么如果出现了环,那么路径上肯定是ABAB交替出现,并且是偶数。。因为出现奇环必有路径上出现重复的AA或者BB,显然这种情况是不会出现的。。

code:

 /*
* Author: Yzcstc
* Created Time: 2014/10/30 19:12:23
* File Name: cf429.cpp
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<string>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#include<ctime>
using namespace std;
vector<int> e[];
int col[], n;
pair<int, int> p[];
void dfs(int u, int color){
if (col[u] != -) return;
col[u] = color;
for (int i = ; i < (int)e[u].size(); ++i)
dfs(e[u][i], color^);
} void solve(){
for (int i = ; i <= n * ; ++i) e[i].clear();
int l, r;
for (int i = ; i < n; ++i){
scanf("%d%d", &l, &r);
e[i<<].push_back(i<<|), e[i<<|].push_back(i<<);
p[i<<] = make_pair(l<<,i<<), p[i<<|] = make_pair(r<<|, i<<|);
}
sort(p, p + *n);
for (int i = ; i < n; ++i){
int x = p[i<<].second, y = p[i<<|].second;
e[x].push_back(y), e[y].push_back(x);
}
memset(col, -, sizeof(col));
for (int i = ; i < n; ++i){
if (col[i<<] == -) dfs(i<<, );
printf("%d ", col[i<<]);
}
} int main(){
// freopen("a.in", "r", stdin);
// freopen("a.out", "w", stdout);
while (scanf("%d", &n) != EOF){
solve();
}
return ;
}

codeforces 429E的更多相关文章

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

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

  2. Codeforces 429E Points and Segments

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

  3. A - Points and Segments CodeForces - 429E

    题解: 方法非常巧妙的一道题 首先考虑要求全部为0怎么做 发现是个欧拉回路的问题(很巧妙) 直接dfs一遍就可以了 而这道题 要求是-1,1,0 我们可以先离散化 完了之后判断每个点被奇数还是偶数条边 ...

  4. Codeforces 429E(欧拉回路)

    题面 传送门 题目大意: 有n条线段,每条线段染红色或蓝色,使得数轴上每个点被红色线段覆盖的次数与被蓝色线段覆盖数差的绝对值小于等于1.输出染色方案. 分析 题意其实可以这样理解: 一段初始全为0 的 ...

  5. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  6. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  7. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  8. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  9. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

随机推荐

  1. 【原创】No matching distribution found for Twisted>=10.0.0 (from scrapy)

    系统  Ubuntu14.04 python  2.7.11 运行  pip install scrapy  报错: No matching distribution found for Twiste ...

  2. web.xml的首页调用struts2的action解决方法

    1,首先在struts.xml里添加如下代码:注意位置 <constant name="struts.action.extension" value="do,act ...

  3. 文件读写方法1.FileInputStream和FileOutputStream

    package fileTest; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundEx ...

  4. avalon2学习教程14动画使用

    avalon2实际上没有实现完整的动画模块,它只是对现有的CSS3动画或jquery animate再包装一层. 我们先说如何用CSS3为avalon实现动画效果.首先要使用avalon.effect ...

  5. MySQL CMake参数说明手册

    MySQL自5.5版本以后,就开始使用CMake编译工具了,因此,你在安装源文件中找不到configure文件是正常的.很多人下到了新版的MySQL,因为找不到configure文件,不知道该怎么继续 ...

  6. 动态生成dropdownlist

    <td colspan=" id="td_ddl" runat="server"> </td> 后台代码: #region 动 ...

  7. 企业好助手U-Mail邮件服务器软件

    对于一家企业,最核心的是什么?有人说人才,有人说技术,也有人说是数据(信息),依小编来 看,这些答案都没错,人才会流动,技术在不断更新,唯有数据(信息),日积月累,将沉淀为公司历史的一部分,作为决策的 ...

  8. Tlist

    Tlist (Classes.pas) 在我刚开始接触TList的时候,TList搞得我迷雾重重,都是Capacity属性惹的祸.我查了Delphi的帮助,它说Capacity是TList的最大容量, ...

  9. iOS模拟器设置输入中文

    1.打开模拟器,选择Settings; 2.选择General  ->KeyBoard ->KeyBoards,选择中文输入法Chinese(Simplified)即可 以前尝试试了很多方 ...

  10. Hibernate学习笔记

    一.Hibernate基础 1.Hibernate简介 Hibernate是一种对象关系映射(ORM)框架,是实现持久化存储的一种解决方案.Java包括Java类到数据库表的映射和数据查询及获取的方法 ...