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的概 ...
随机推荐
- C++ 创建和遍历二叉树
一个简单的创建和遍历二叉树的C++程序,二叉树的其他操作程序待更新. #include <iostream> using namespace std; struct BiTNode{ ch ...
- vs2010 编译boost库
下载boost_1_49_0 打开vs2010工具dos, 再进入E:\boost_1_49_0 运行: bootstrap.bat 然后再运行: bjam stage --toolset=msvc- ...
- android开发 如何调用SO
java package com.example.callsodemo; import android.R.integer; import android.R.string; import andro ...
- nginx环境下配置nagiosQL-关于nagiosql配置文件
接上文:nginx环境下配置nagios-关于nginx.conf nagiosql文件应该处于conf/domain/目录下 nagiosql配置如下: ; gzi ...
- js常用正则表达式2
字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界. -或- 对 ...
- Selenium2+python自动化11-定位一组元素find_elements
前言 前面的几篇都是讲如何定位一个元素,有时候一个页面上有多个对象需要操作,如果一个个去定位的话,比较繁琐,这时候就可以定位一组对象. webdriver 提供了定位一组元素的方法,跟前面八种定位方式 ...
- CSS3样式问题
empty-cells 属性设置是否显示表格中的空单元格 tr:nth-child(even)偶数行的表格 li:nth-child(20)指定位置 2016-09-2813:23:45
- IE、FF、Safari、OP不同浏览器兼容报告
IE.FF.Safari.OP不同浏览器兼容报告 1 浏览器内核简介 Trident IE浏览器(GreenBrowser绿色浏览器, 遨游浏览器....都是IE) Geckos Fi ...
- jsp学习--JSP运行原理,九大隐式对象和JSP常用标签
一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...
- instancetype、id、NSObject的联系和区别
1.id和instancetype都能省去具体类型,提高代码的通用性.而NSObject *则没有这种功能. 2.instancetype只能用于方法的返回类型,而id用处和NSObject *类似. ...