链接 CF429E Points and Segments

  • 给定\(n\)条线段,然后给这些线段红蓝染色,求最后直线上上任意一个点被蓝色及红色线段覆盖次数之差的绝对值不大于\(1\),构造方案,\(n\leq10^5\)
  • 欧拉回路。
  • 考虑差分的思想(一般这样的区间覆盖问题都可以转化成差分,变成两两匹配问题。),一个线段被染色也就是\(l++\),\((r+1)--\)
  • 设从\(l\)到\(r+1\)边为红色,\(r+1\)到\(l\)的边为蓝色。
  • 那么我们就在考虑怎么样遍历这张图,使得每个点入度出度差小于等于\(1\)。
  • 这样不好做,新加入一些\(0\)边,表示不做处理,也就是最后颜色之差等于\(1\)。
  • 问题就变成了找到一些路径使得每个点出度入度相等。
  • 求一个欧拉回路即可。
//CF429E Points and Segments
#include<bits/stdc++.h>
#define R register int
#define ll long long
using namespace std;
const int N=500001;
int n,len,cnt,O[N],fid[N],vis[N],du[N];
int hd[N],to[N],nt[N],w[N],ans[N];
void link(R f,R t,R d){nt[++cnt]=hd[f],w[cnt]=d,to[cnt]=t,hd[f]=cnt;}
struct Qs{int l,r;}Q[N];
int gi(){
R x=0,k=1;char c=getchar();
while((c<'0'||c>'9')&&c!='-')c=getchar();
if(c=='-')k=-1,c=getchar();
while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+c-'0',c=getchar();
return x*k;
}
void Dfs(R i){
fid[i]=1;
for(R &k=hd[i];k;k=nt[k])
if(!vis[k]){
vis[k]=vis[k^1]=1,ans[w[k]]=(i<to[k]);
Dfs(to[k]);
}
}
int main(){
n=gi(),cnt=1;
for(R i=1;i<=n;++i){
Q[i].l=gi(),Q[i].r=gi()+1;
O[++len]=Q[i].l,O[++len]=Q[i].r;
}
sort(O+1,O+len+1),len=unique(O+1,O+len+1)-O-1;
for(R i=1;i<=n;++i){
Q[i].l=lower_bound(O+1,O+len+1,Q[i].l)-O;
Q[i].r=lower_bound(O+1,O+len+1,Q[i].r)-O;
link(Q[i].l,Q[i].r,i),link(Q[i].r,Q[i].l,i);
du[Q[i].l]++,du[Q[i].r]++;
}
R las=0;
for(R i=1;i<=len;++i)
if(du[i]&1){
if(las)link(las,i,0),link(i,las,0),du[i]++,du[las]++,las=0;
else las=i;
}
for(R i=1;i<=len;++i)if(!fid[i])Dfs(i);
for(R i=1;i<=n;++i)putchar(ans[i]+'0'),putchar(' ');
return 0;
}

最新文章

  1. JavaScript之全局变量和隐式全局变量
  2. 【Asphyre引擎】关于AsphyreTypes中OverlapRect的改动,都是泪啊!!!
  3. Opencv 摄像头矫正
  4. ConfigurationManager配置操作
  5. Centos6.x 安装vnc
  6. 在CentOS6上使用YUM安装php5.5.x
  7. Gcc简介与常用命令
  8. jQuery基础与常用方法学习笔记
  9. oracle 的 SDO_GEOMETRY
  10. 调用webService的几种方式
  11. mysql一些使用技巧
  12. 引用第三方dll引发的问题解决
  13. [Android][Framework]裁剪SystemServer服务以及关闭SystemFeature
  14. ChakraCore/JSRT使用问题汇总
  15. vue源码分析—数据绑定
  16. (5)Python字典
  17. 微信公众号平台上传文件返回错误代码:40005 invalid file type
  18. 『计算机视觉』Mask-RCNN_从服装关键点检测看KeyPoints分支
  19. Redis简单延时队列
  20. HBase 管理,性能调优

热门文章

  1. android 摇一摇功能的实现
  2. 模拟vue实现简单的webpack打包
  3. ES6 嵌套数组进行解构
  4. shell中的=~的简单用法
  5. WCF - Home
  6. sqlite时间类型
  7. such as, for example, include和contain
  8. MongoDB学习【二】—MongoDB基础和数据类型
  9. APlayer 媒体播放引擎
  10. How to use Nlog for ASP.NET Core with csproj