【CF429E】Points and Segments(欧拉回路)
【CF429E】Points and Segments(欧拉回路)
题面
题解
欧拉回路有这样一个性质,如果把所有点在平面内排成一行,路径看成区间的覆盖,那么每个点被从左往右的覆盖次数等于从右往左的覆盖次数。
发现这题很类似上面这个东西。
将\(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(欧拉回路)的更多相关文章
- 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 ans Segments_欧拉回路
Points and Segments 题目链接:www.codeforces.com/contest/429/problem/E 注释:略. 题解: 先离散化. 发现每个位置如果被偶数条线段覆盖的话 ...
- CF429E Points and Segments 构造、欧拉回路
传送门 如果把一条线段\([l,r]\)看成一条无向边\((l,r+1)\),从\(l\)走到\(r+1\)表示线段\([l,r]\)染成红色,从\(r+1\)走到\(l\)表示线段\([l,r]\) ...
- 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 ...
- 『ACM C++』 Codeforces | 1066A - Points in Segments
大一生活真 特么 ”丰富多彩“ ,多彩到我要忙到哭泣,身为班长,很多班级的事情需要管理,也是,什么东西都得体验学一学,从学生会主席.团委团总支.社团社长都体验过一番了,现在差个班长也没试过,就来体验了 ...
- 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 ...
- 【CF429E】 Points and Segments(欧拉回路)
传送门 CodeForces 洛谷 Solution 考虑欧拉回路有一个性质. 如果把点抽出来搞成一条直线,路径看成区间覆盖,那么一个点从左往右被覆盖的次数等于从右往左被覆盖的次数. 发现这个性质和本 ...
- Codeforces 429E - Points and Segments(欧拉回路)
Codeforces 题面传送门 & 洛谷题面传送门 果然我不具备融会贯通的能力/ll 看到这样的设问我们可以很自然地联想到这道题,具体来说我们可以通过某种方式建出一张图,然后根据" ...
随机推荐
- centos6 yum 安装memcached
centos6 yum 安装memcached - 像块石头 - 博客园http://www.cnblogs.com/rockee/archive/2012/08/01/2619160.html yu ...
- Windows 下面 redis 发布为服务的官方方法
除了 NSSM 之外 另外一种方式 感觉还是很好用的 redis-server --service-install redis.windows.conf --loglevel verbose 感觉也可 ...
- zookeeper的安装和启动教程
zookeeper的安装和启动 zookeeper安装包所在目录: 上传文件到虚拟机.现在本地新建一个目录setup,将zookeeper压缩包复制进去. ALT+P打开一个标签,操作如下put命令. ...
- mybatis源码分析(四)---------------代理对象的生成
在mybatis两种开发方式这边文章中,我们提到了Mapper动态代理开发这种方式,现在抛出一个问题:通过sqlSession.getMapper(XXXMapper.class)来获取代理对象的过程 ...
- python爬虫scrapy之downloader_middleware设置proxy代理
一.背景: 小编在爬虫的时候肯定会遇到被封杀的情况,昨天爬了一个网站,刚开始是可以了,在settings的设置DEFAULT_REQUEST_HEADERS伪装自己是chrome浏览器,刚开始是可以的 ...
- Python之路-(Django(csrf,中间件,缓存,信号,Model操作,Form操作))
csrf 中间件 缓存 信号 Model操作 Form操作 csrf: 用 django 有多久,我跟 csrf 这个概念打交道就有久了. 每次初始化一个项目时都能看到 django.middlewa ...
- linux audit (9)--生成audit报表
aureport这个命令可以生成一个总结性的柱状图报表,默认情况下,在/var/log/audit目录下的所有日志文件都会生成一个报表,也可以使用如下命令来指定一个不同的文件,aureport opt ...
- 老男孩python学习自修第十天【三元表达式与lambda表达式】
例如: 1.使用三元表达式给变量赋值 result = '空' if x == None else x 2.使用lambda定义函数 add = lambda x, y: x+y
- 如何在mac下安装php
步骤如下: 1.下载php源码并解压 2.进入php源码并configure 3.安装openssl 4.sudo make及make test 5.sudo make install 具体命令如下: ...
- python易混易乱(1)
字典 基础操作 <1>keys my_dict = {"name":"zhangsan","age":18} res = my_ ...