[CF429E]Points ans Segments_欧拉回路
Points and Segments
题目链接:www.codeforces.com/contest/429/problem/E
注释:略。
题解:
先离散化。
发现每个位置如果被偶数条线段覆盖的话那么这个位置上的线段两种颜色的个数是相等的也就是确定的。
如果是奇数的话,我们就强制再放一条线段覆盖这个位置,无论这条新加入线段的颜色,剩下的颜色个数也就确定了。
那么,每条线段只能有一种颜色,而且每个位置值为$0$。
我们想一个东西:欧拉回路。
发现欧拉回路其实要干的就是这事,所以我们暴力建图欧拉回路即可。
至于怎么想到欧拉回路这个东西.....看感觉吧......
代码:
#include <bits/stdc++.h>
#define setIO(s) freopen(s".in", "r", stdin), freopen(s".out", "w", stdout)
#define N 1000010
using namespace std;
char *p1, *p2, buf[100000];
#define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1 ++ )
int rd() {
int x = 0, f = 1;
char c = nc();
while (c < 48) {
if (c == '-')
f = -1;
c = nc();
}
while (c > 47) {
x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();
}
return x * f;
}
int b[N];
struct Node {
int x, y;
}a[N];
int head[N], to[N << 1], nxt[N << 1], tot = 1, id[N << 1], val[N << 1];
int ans[N];
inline void add(int x, int y, int z) {
to[ ++ tot] = y;
id[tot] = z;
nxt[tot] = head[x];
head[x] = tot;
}
bool vis[N];
int d[N];
void dfs(int p) {
vis[p] = true;
for (int i = head[p]; i; i = nxt[i]) {
if (!val[i]) {
val[i] = val[i ^ 1] = 1;
if (p < to[i]) {
ans[id[i]] = 1;
}
else {
ans[id[i]] = 0;
}
dfs(to[i]);
}
}
}
int main() {
setIO("party");
int n = rd(), cnt = 0;
for (int i = 1; i <= n; i ++ ) {
a[i].x = rd(), a[i].y = rd() + 1;
b[ ++ cnt] = a[i].x, b[ ++ cnt] = a[i].y;
}
sort(b + 1, b + cnt + 1);
cnt = unique(b + 1, b + cnt + 1) - b - 1;
// cout << cnt << endl ;
for (int i = 1; i <= n; i ++ ) {
a[i].x = lower_bound(b + 1, b + cnt + 1, a[i].x) - b;
a[i].y = lower_bound(b + 1, b + cnt + 1, a[i].y) - b;
add(a[i].x, a[i].y, i), add(a[i].y, a[i].x, i);
d[a[i].x] ++ , d[a[i].y] ++ ;
}
// for (int i = 1; i <= n; i ++ ) {
// printf("%d %d\n", a[i].x, a[i].y);
// }
int pre = 0;
for (int i = 1; i <= cnt; i ++ ) {
if (d[i] & 1) {
if (!pre) {
pre = i;
}
else {
add(pre, i, 0), add(i, pre, 0);
d[i] ++ , d[pre] ++ ;
pre = 0;
}
}
}
for (int i = 1; i <= cnt; i ++ ) {
if (!vis[i]) {
dfs(i);
}
}
for (int i = 1; i <= n; i ++ ) {
printf("%d ", ans[i]);
}
fclose(stdin), fclose(stdout);
return 0;
}
[CF429E]Points ans Segments_欧拉回路的更多相关文章
- CF429E Points and Segments
链接 CF429E Points and Segments 给定\(n\)条线段,然后给这些线段红蓝染色,求最后直线上上任意一个点被蓝色及红色线段覆盖次数之差的绝对值不大于\(1\),构造方案,\(n ...
- 【CF429E】Points and Segments 欧拉回路
[CF429E]Points and Segments 题意:给你数轴上的n条线段$[l_i,r_i]$,你要给每条线段确定一个权值+1/-1,使得:对于数轴上的任一个点,所有包含它的线段的权值和只能 ...
- CF429E Points and Segments 构造、欧拉回路
传送门 如果把一条线段\([l,r]\)看成一条无向边\((l,r+1)\),从\(l\)走到\(r+1\)表示线段\([l,r]\)染成红色,从\(r+1\)走到\(l\)表示线段\([l,r]\) ...
- nyoj 230/poj 2513 彩色棒 并查集+字典树+欧拉回路
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=230 题意:给你许许多多的木棍,没条木棍两端有两种颜色,问你在将木棍相连时,接触的端点颜色 ...
- bzoj 2935 [Poi1999]原始生物——欧拉回路思路!
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2935 有向图用最小的路径(==总点数最少)覆盖所有边. 完了完了我居然连1999年的题都做不 ...
- 452. Minimum Number of Arrows to Burst Balloons——排序+贪心算法
There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided ...
- [Swift]LeetCode948. 令牌放置 | Bag of Tokens
You have an initial power P, an initial score of 0 points, and a bag of tokens. Each token can be us ...
- 【CF429E】Points and Segments(欧拉回路)
[CF429E]Points and Segments(欧拉回路) 题面 CF 洛谷 题解 欧拉回路有这样一个性质,如果把所有点在平面内排成一行,路径看成区间的覆盖,那么每个点被从左往右的覆盖次数等于 ...
- 【CF429E】 Points and Segments(欧拉回路)
传送门 CodeForces 洛谷 Solution 考虑欧拉回路有一个性质. 如果把点抽出来搞成一条直线,路径看成区间覆盖,那么一个点从左往右被覆盖的次数等于从右往左被覆盖的次数. 发现这个性质和本 ...
随机推荐
- robocopy复制大文件
需要把win7某个盘的资料复制到移动硬盘保存,用xcopy 结果出现内存不足的错误 我的资料约50G 一查才发现要用RoboCopy.在cmd中试了一下,发现真是白用了这么多年win7,都马上要淘汰 ...
- [UVa12345] Dynamic len (带 修 )
题意:有n个数编号从0→n-1,两种操作: Q L R:询问编号为L→R-1的数中共有多少种不同的数 M X Y:将编号为X的数改为Y ...
- Js中Array常用方法小结
说起Array的方法,不免让人皱一下眉头,下面我们从增删改查角度依次来总结. 1.增 push: 将传入的参数 ,插入数组的尾部,并返回新数组的长度.不管传入参数为一个值还是一个数组,都作为插入数组的 ...
- JAVA基础知识|内部类
一.什么是内部类? 内部类(inner class)是定义在另一个类中的类 为什么使用内部类? 1)内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据 2)内部类可以对同一个包中的其他类隐藏 ...
- 笔记七(编写第一个UEFI程序)
搭建好uefi开发环境之后,在MyWorkspace文件夹中建立一个文件夹ExamplePkg; ,然后在ExamplePkg文件夹中创建HelloWorld文件夹,Include文件夹,Exampl ...
- mysql服务器变量、缓存及索引
服务器变量 注意:其中有些参数支持运行时修改,会立即生效:有些参数不支持,且只能通过修改配置文件,并重启服务器程序生效:有些参数作用域是全局的,且不可改变:有些可以为每个用户提供单独(会话)的设置. ...
- java课后实验性问题4
课后作业一: 使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象? 设计思路:定义类的构造函数时使静态变量i进行i++,即每构 ...
- New in Python 3.8.0
Python 3.8.0 发布时间: Oct. 14, 2019 这是一个Python3.8.0的稳定发行版. Python3.8.0是最新的Python编程语言发行版,ta包含了许多新的特征和优化. ...
- ArcGIS超级工具SPTOOLS-编号工具
1.1 整库更新BSM 输入一个MDB或GDB,将所有的要素类和表,按某个字段BSM,BSM不存在,会自动创建,从某个开始,顺序编号. 1.2 更新BSM 根据自己输入的多个表或要素,可以自己编号 ...
- ? 这是个很好的问题。Go 当前的 GC 显然做了一些额外的工作,但它也跟其他的工作并行执行,所以在具有备用 CPU 的系统上,Go 正在作出合理的选择。请看 https://golang.org/issue/17969 结束语(Closing notes) 通过研究 Go 垃圾收集器,我能够理解 Go GC 当前结构的背景以及它如何克服它的弱点。Go发展得非常快。如果你对 Go感兴趣,最好继
? 这是个很好的问题.Go 当前的 GC 显然做了一些额外的工作,但它也跟其他的工作并行执行,所以在具有备用 CPU 的系统上,Go 正在作出合理的选择.请看 https://golang.org/i ...