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. 004——转载C#禁止改变窗体大小

    原文链接:http://www.cnblogs.com/shaozhuyong/p/5545005.html 1.先把MaximizeBox和MinimumBox设置为false,这时你发现最大最小化 ...

  2. WORD粘贴图片+DEDE

    自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了.一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器) ...

  3. CSP-S2 2019 游记

    我简直是咸鱼,一只彻头彻尾的咸鱼. 慵懒,成为了我本次比赛的主调. 10 月 27 日晚上--也有可能是 10 月 28 日的凌晨,睡眼惺忪的我坐在书桌前,照常奋笔疾书着.作业本放回一本又拿出一本,练 ...

  4. 18.4.1 考试解题报告 P71

    题目:https://files.cnblogs.com/files/lovewhy/problem.pdf 偷偷摘来dalao题面. P71竞赛时间:???? 年?? 月?? 日??:??-??:? ...

  5. Android原生编解码接口 MediaCodec 之——踩坑

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/gb702250823/article/d ...

  6. Mac下Maven的删除和安装

    一 删除maven 找到当前的maven路劲:使用mvn -v查看当前maven的安装目录在哪 删掉sudo rm -rf [maven的路径] 二 安装maven 1.下载maven压缩包 mac下 ...

  7. 元祖(tuple)

    元祖和列表几乎是一样的: 列表是可以进行修改的,它可以填加一个元素,也可以移除一个元素,但元祖是不能修改的 如果我们以后想导一个集合,这个集合以后不允许修改,我们用元祖:如何我们想让别人进行修改,我们 ...

  8. hive安装运行hive报错通解

    参考博文:https://blog.csdn.net/lsxy117/article/details/47703155 大部分问题还是hadoop的配置文件的问题: 修改配置文件hadoop/conf ...

  9. C# 窗体 类似framest 左侧点击右侧显示 左侧菜单右侧显示

    首先托一个splitContainer调节大小位置 然后进行再新创建一个窗体名为add 在左侧拖入button按钮 进入代码阶段 更改属性 public Main() { InitializeComp ...

  10. 调试NTDLL加载

    1 随便切到一个进程 0: kd> !process 0 0 explorer.exePROCESS 8157e9a8 SessionId: 0 Cid: 06a4 Peb: 7ffde000 ...