【学习笔记】EC-Final 2022 K. Magic

最近的题都只会抄题解😅

首先,操作顺序会影响答案,因此不能直接贪心。其次,因为是求贡献最大,所以可以考虑枚举最终哪些位置对答案产生了贡献,进而转化为全局贡献。

1.1 1.1 1.1 如果 [ l 1 , r 1 ) ⊆ [ l 2 , r 2 ) [l_1,r_1)\subseteq [l_2,r_2) [l1,r1)⊆[l2,r2),那么一定是贪心的先操作 [ l r , r 2 ) [l_r,r_2) [lr,r2),因此这部分限制不用考虑

1.2 1.2 1.2 对于两个区间 [ l 1 , r 1 ) , [ l 2 , r 2 ) [l_1,r_1),[l_2,r_2) [l1,r1),[l2,r2),如果满足 l 1 < l 2 < r 1 < r 2 l1<l2<r_1<r_2 l1<l2<r1<r2,并且选择了 r 1 r_1 r1,那么意味着 l 2 l_2 l2一定比 r 1 r_1 r1先操作;反之亦然,因此 l 2 l_2 l2和 r 1 r_1 r1不能同时被选择。注意到 l i , r i l_i,r_i li,ri互不相同,因此我们考虑到了所有位置,并且每个位置至少有一次产生贡献的机会。

容易证明这样不会产生环,因为 r r r是递增的

发现只有 l i l_i li和 r i r_i ri之间会有连边,问题转化为求二分图最大独立集。

使用 bitset \text{bitset} bitset优化,复杂度 O ( n 3 w ) O(\frac{n^3}{w}) O(wn3)。

类似的题目:ARC092F Two Faced Edges

cpp 复制代码
#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define ll long long
using namespace std;
const int N=5005;
int n,tot,l[N],r[N],match[N];
int px[N],py[N];
bitset<N>to[N],vs;
queue<int>Q;
int bfs(int u){
    while(Q.size())Q.pop();
    vs.set(),Q.push(u);int v=-1;
    while(Q.size()){
        int x=Q.front();Q.pop();
        bitset<N>tmp=vs&to[x];
        for(int y=tmp._Find_first();y<=n;y=tmp._Find_next(y)){
            int z=match[y];vs[y]=0;
            if(z==0){
                match[y]=x,v=x;
                break;
            }
            Q.push(z),px[z]=x,py[z]=y;
        }if(~v)break;
    }if(v==-1)return 0;
    while(v!=u){
        match[py[v]]=px[v];
        v=px[v];
    }
    return 1;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>l[i]>>r[i];
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(l[i]<l[j]&&l[j]<r[i]&&r[i]<r[j]){
                to[i][j]=1;
            }
        }
    }
    for(int i=1;i<=n;i++){
        tot+=bfs(i);
    }cout<<2*n-tot;
}
相关推荐
玖玥拾8 小时前
LeetCode 392 判断子序列
笔记·算法·leetcode
摇滚侠9 小时前
《SpringBoot 3:入门与应用实战》第 7 章 AOP 思想与实现 阅读笔记 15
java·spring boot·笔记
摇滚侠9 小时前
《SpringBoot 3:入门与应用实战》第 7 章 AOP 思想与实现 阅读笔记 14
spring boot·笔记·后端
JavaPub-rodert9 小时前
具身智能行业技术全景:从感知、规划、控制到 VLA 与机器人学习
学习·机器人
知识分享小能手11 小时前
概理论与数理统计学习教程,从入门到精通,在数理统计中应用R软件(22)
开发语言·学习·r语言
陈年老古董12 小时前
OpenCV图像处理笔记:图像拼接、答题卡识别与目标提取
人工智能·笔记·python·opencv·计算机视觉
陈年老古董12 小时前
CentOS编译安装Python3.11完整教程
linux·笔记·学习·centos·python3.11
戈文波Geir-Wenbo Ge12 小时前
深度七步:从学习到主宰
学习
clorinda12 小时前
OpenCV实战学习记录:图像拼接与答题卡识别
人工智能·opencv·学习
red_redemption12 小时前
自由学习记录(221)
学习·renderdoc