codeforces 429E
题意:给定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的更多相关文章
- Codeforces 429E - Points and Segments(欧拉回路)
Codeforces 题面传送门 & 洛谷题面传送门 果然我不具备融会贯通的能力/ll 看到这样的设问我们可以很自然地联想到这道题,具体来说我们可以通过某种方式建出一张图,然后根据" ...
- Codeforces 429E Points and Segments
Description 题面 题目大意:有 \(n\) 个区间 \([L_i,R_i]\) ,你要给每一个区间染红蓝,使得每一个位置被红色染过的次数与被蓝色染过的次数差的绝对值不大于\(1\) Sol ...
- A - Points and Segments CodeForces - 429E
题解: 方法非常巧妙的一道题 首先考虑要求全部为0怎么做 发现是个欧拉回路的问题(很巧妙) 直接dfs一遍就可以了 而这道题 要求是-1,1,0 我们可以先离散化 完了之后判断每个点被奇数还是偶数条边 ...
- Codeforces 429E(欧拉回路)
题面 传送门 题目大意: 有n条线段,每条线段染红色或蓝色,使得数轴上每个点被红色线段覆盖的次数与被蓝色线段覆盖数差的绝对值小于等于1.输出染色方案. 分析 题意其实可以这样理解: 一段初始全为0 的 ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- CodeForces - 662A Gambling Nim
http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...
随机推荐
- 前端项目构建error
Refusing to install webpack as a dependency of itself 原因:package.json中,"name": "webpa ...
- vs2013_arcgis_developer_kit_101_install
1.修改注册表以安装AE101 在注册表中HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0增加类型为REG_SZ的 ...
- LINUX下查看负载
1,查看磁盘 df -h 2,查看内存大小 free free [-m|g]按MB,GB显示内存 vmstat 3,查看cpu cat /proc/cpuinfo 只看cpu数量grep " ...
- IO同步、异步与阻塞、非阻塞
一.同步与异步同步/异步, 它们是消息的通知机制 1. 概念解释A. 同步所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回. 按照这个定义,其实绝大多数函数都是同步调用(例如si ...
- Java web--反射(解刨)
本质:先加载类 再解刨类的方法,字段,构造函数 目的:解刨出构造函数 为了new对象 解刨出字段 为了封装数据进去 解刨方法 ...
- bash脚本编程之一 变量、变量类型等
变量的内容 1.变量命名: 1.只能包含字母.数字和下划线,并且不能以数字开头, 2.不应该跟系统中已有的环境变量重名 3.最好能见名知意 2.变量赋值: 设置变量: ...
- 关于isScroll如何使用
isScroll是用原生javascript写的实现局部滚动的一个库,它不依赖任何第三方库.设计的初衷是为了解决移动webkit系浏览器的区域滚动问题,兼容safari.chrome.firefox5 ...
- Django concept
1. MVC in Django http://stackoverflow.com/questions/6621653/django-vs-model-view-controller https:// ...
- java break语句的三种用法
1.用于switch语句当中,用于终止语句 2.用于跳出循环,此为不带标签的break语句,相当与goto的作用 e.g while(i<j&&h<k){ if(h< ...
- Spring----->projects----->概述
概述: Spring旗下有若干子项目,整个spring工程中其实包含了若干个子项目,这些子项目种类丰富,分别适用于不同的应用领域.开发者可以根据自己的project的功能特色选取spring中某些特定 ...