zoukankan      html  css  js  c++  java
  • CF429E Points and Segments

    链接 CF429E Points and Segments

    • 给定(n)条线段,然后给这些线段红蓝染色,求最后直线上上任意一个点被蓝色及红色线段覆盖次数之差的绝对值不大于(1),构造方案,(nleq10^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;
    }
    
    
  • 相关阅读:
    DLL文件的原理
    OD使用教程7(上) 调试篇07|解密系列
    复制独立数组的方法
    [转载 js] js正则表达式
    中国雅虎ued成员
    复制独立数组的方法
    [转载 js] js正则表达式
    以前做的flash相册
    编程的幽默
    我最早的全flash站
  • 原文地址:https://www.cnblogs.com/Tyher/p/9811496.html
Copyright © 2011-2022 走看看