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_欧拉回路的更多相关文章

  1. CF429E Points and Segments

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

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

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

  3. CF429E Points and Segments 构造、欧拉回路

    传送门 如果把一条线段\([l,r]\)看成一条无向边\((l,r+1)\),从\(l\)走到\(r+1\)表示线段\([l,r]\)染成红色,从\(r+1\)走到\(l\)表示线段\([l,r]\) ...

  4. nyoj 230/poj 2513 彩色棒 并查集+字典树+欧拉回路

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=230 题意:给你许许多多的木棍,没条木棍两端有两种颜色,问你在将木棍相连时,接触的端点颜色 ...

  5. bzoj 2935 [Poi1999]原始生物——欧拉回路思路!

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2935 有向图用最小的路径(==总点数最少)覆盖所有边. 完了完了我居然连1999年的题都做不 ...

  6. 452. Minimum Number of Arrows to Burst Balloons——排序+贪心算法

    There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided ...

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

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

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

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

    传送门 CodeForces 洛谷 Solution 考虑欧拉回路有一个性质. 如果把点抽出来搞成一条直线,路径看成区间覆盖,那么一个点从左往右被覆盖的次数等于从右往左被覆盖的次数. 发现这个性质和本 ...

随机推荐

  1. keyup([[data],fn]) 当按钮被松开时,发生 keyup 事件。它发生在当前获得焦点的元素上。

    keyup([[data],fn]) 概述 当按钮被松开时,发生 keyup 事件.它发生在当前获得焦点的元素上. 注释:如果在文档元素上进行设置,则无论元素是否获得焦点,该事件都会发生.直线电机选型 ...

  2. 014_linux驱动之_信号符号名、描述和它们的信号值

    符号名 信号值 描述 是否符合POSIX SIGHUP 1 在控制终端上检测到挂断或控制线程死 亡 是 SIGINT 2 交互注意信号 是 SIGQUIT 3 交 互中止信号 是 SIGILL 4 检 ...

  3. Material Icons 查找的替代办法

    1 问题 1.1 国内访问 google 困难,众所周知 1.2 在平时的工作中使用 Material Icons 如何查询呢 2 办法 2.1 github.com 把包 download 2.2 ...

  4. .net SerialPort

    虚拟串口并定时向虚拟串口定时发数据 http://scorpiomiracle.iteye.com/blog/653923 C#中如何使用SerialPort控件向单片机发送数据? http://zh ...

  5. ueditor+复制word图片粘贴上传

    Chrome+IE默认支持粘贴剪切板中的图片,但是我要发布的文章存在word里面,图片多达数十张,我总不能一张一张复制吧?Chrome高版本提供了可以将单张图片转换在BASE64字符串的功能.但是无法 ...

  6. 【説明する】KMP

    KMP是一个困扰我很久的算法,听老师或者是学姐讲了差不多有4次了,但是还是搞不太懂,今天终于,终于,终于搞懂了! ——2017-10-29 Vanora 首先推荐一下KMP详解——July 读罢之后内 ...

  7. cyk追楠神系列一(SDUT3703)

    cyk追楠神系列一 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 众所周知,cyk ...

  8. windows游戏编程X86 32位保护模式下的内存管理概述(二)

    本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22448323 作者:jadeshu   邮箱: jades ...

  9. gzip 的使用

    bogon:Desktop macname$ mkdir testdir bogon:Desktop macname$ cd testdir/ bogon:testdir macname$ ls bo ...

  10. Robot Framework(十九) 附录

    6附录 6.1测试数据中的所有可用设置 6.1.1设置表 Setting表用于导入测试库,资源文件和变量文件,以及定义测试套件和测试用例的元数据.它可以包含在测试用例文件和资源文件中.请注意,在资源文 ...