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

题面

CF

洛谷

题解

欧拉回路有这样一个性质,如果把所有点在平面内排成一行,路径看成区间的覆盖,那么每个点被从左往右的覆盖次数等于从右往左的覆盖次数。

发现这题很类似上面这个东西。

将\(L\)向\(R+1\)连边,但是不能直接做欧拉回路,因为图不连通。

找到度数为奇数的所有点,把相邻的两个两两配对,然后在他们之间连条边,然后求解欧拉回路。

因为这样子配对完之后新增的区间不交,令黑色区间为\(+1\),白色区间为\(-1\),那么除了相邻两个奇度数点之间的区间外,其他区间的权值和为\(0\),而奇度数之间的区间的绝对值为\(1\)。

那么这个问题就解决完了。

还是注意即是这样子连完了边还可能不连通,所以每个连通块都要跑一遍。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define MAX 400100
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int n,L[MAX],R[MAX];
int S[MAX],top;
struct Line{int v,next;}e[MAX];
int h[MAX],cnt=2,dg[MAX];
inline void Add(int u,int v){e[cnt]=(Line){v,h[u]};h[u]=cnt++;dg[v]+=1;}
int vis[MAX];bool book[MAX];
void dfs(int u)
{
for(int &i=h[u];i;i=e[i].next)
{
int v=e[i].v,j=i;if(book[i>>1])continue;
book[i>>1]=true;dfs(v);vis[j>>1]=u<v;
}
}
int main()
{
n=read();
for(int i=1;i<=n;++i)L[i]=read(),R[i]=read();
for(int i=1;i<=n;++i)S[++top]=L[i],S[++top]=L[i]-1;
for(int i=1;i<=n;++i)S[++top]=R[i],S[++top]=R[i]+1;
sort(&S[1],&S[top+1]);top=unique(&S[1],&S[top+1])-S-1;
for(int i=1;i<=n;++i)L[i]=lower_bound(&S[1],&S[top+1],L[i])-S;
for(int i=1;i<=n;++i)R[i]=lower_bound(&S[1],&S[top+1],R[i])-S;
for(int i=1;i<=n;++i)Add(L[i],R[i]+1),Add(R[i]+1,L[i]);
for(int i=1,lst=0;i<=top;++i)if(dg[i]&1)lst?Add(i,lst),Add(lst,i),lst=0:lst=i;
for(int i=2;i<cnt;i+=2)if(!book[i>>1])dfs(e[i].v);
for(int i=1;i<=n;++i)printf("%d ",vis[i]);
return 0;
}

【CF429E】Points and 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 ans Segments_欧拉回路

    Points and Segments 题目链接:www.codeforces.com/contest/429/problem/E 注释:略. 题解: 先离散化. 发现每个位置如果被偶数条线段覆盖的话 ...

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

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

  5. Codeforces Round #245 (Div. 2) A. Points and Segments (easy) 贪心

    A. Points and Segments (easy) Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/con ...

  6. 『ACM C++』 Codeforces | 1066A - Points in Segments

    大一生活真 特么 ”丰富多彩“ ,多彩到我要忙到哭泣,身为班长,很多班级的事情需要管理,也是,什么东西都得体验学一学,从学生会主席.团委团总支.社团社长都体验过一番了,现在差个班长也没试过,就来体验了 ...

  7. Codeforces Round #501 (Div. 3) 1015A Points in Segments (前缀和)

    A. Points in Segments time limit per test 1 second memory limit per test 256 megabytes input standar ...

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

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

  9. Codeforces 429E - Points and Segments(欧拉回路)

    Codeforces 题面传送门 & 洛谷题面传送门 果然我不具备融会贯通的能力/ll 看到这样的设问我们可以很自然地联想到这道题,具体来说我们可以通过某种方式建出一张图,然后根据" ...

随机推荐

  1. Python_面向对象_单例模式

    class A(object): pass a1 = A() a2 = A() print(a1 == a2)print(id(a1))print(id(a2)) 结果: False 23257231 ...

  2. node path

    1.path.basename(path[, ext]) ● path <string> ● ext <string> An optional file extension ● ...

  3. 如何入门vue之一

    入门vue 首先从vue的指令开始学起. vue的指令: v-if  根据是否得到的布尔值进行是否显示. v-show:根据是否得到的布尔值是否显示.不同的地方在于隐藏是style隐藏. v-on 监 ...

  4. Es6数值拓展

    Es6数值拓展 一,Number扩展 1,ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示. 将0b和0o前缀的字符串数值转为十进制,要使用Number方法 N ...

  5. [转帖]Stack的三种含义

    Stack的三种含义 http://www.ruanyifeng.com/blog/2013/11/stack.html 学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈&q ...

  6. Codeforces 1154E Two Teams

    题目链接:http://codeforces.com/problemset/problem/1154/E 题目大意: 有n个队员,编号1~n,每个人的能力各自对应1~n中的一个数,每个人的能力都不相同 ...

  7. hive自定义函数

  8. python爬虫之git的使用(github的使用)

    上面博文中我们简单的了解了一下基本的git操作,但是我们都是将代码放到了本地的仓库里面,但是如果我们是一个团队开发的话,肯定不会放到每个人的本地,必须得有个统一的地方存放代码,国外的大家都在使用git ...

  9. 【转】MySQL sql_mode 说明(及处理一起 sql_mode 引发的问题)

    1. MySQL 莫名变成了 Strict SQL Mode 最近测试组那边反应数据库部分写入失败,app层提示是插入成功,但表里面里面没有产生数据,而两个写入操作的另外一个表有数据.因为 inser ...

  10. VS Code & MacOS & Zsh

    VS Code & MacOS & Zsh https://code.visualstudio.com/docs/setup/mac solution OK bug $ cat .zs ...