ABC205F

对于该题的建模
考虑类型为二分图,即对N个点进行拆点,左边与行相连,容量为1,右边与列相连,容量为1,然后跑最大流即可

#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N = 1e6+10;
struct Edge{
    int v,next,w;
}edge[N<<1];
int tot=1,head[N],S,T;
const int INF = 1e9;
int d[N],cur[N];
void add(int u,int v,int w1,int w2){
    edge[++tot]={v,head[u],w1};
    head[u]=tot;
    edge[++tot]={u,head[v],w2};
    head[v]=tot;
}
bool bfs(){
    queue<int>q;
    memset(d,0,sizeof d);
    d[S]=1;cur[S]=head[S];
    q.push(S);
    while(q.size()){
        int u=q.front();
        q.pop();
        for(int i=head[u];i;i=edge[i].next){
            int v=edge[i].v;
            int w=edge[i].w;
            if(w&&!d[v]){
                cur[v]=head[v];
                d[v]=d[u]+1;
                if(v==T)return 1;
                q.push(v);
            }

        }
    }
    return 0;
}
int dfs(int u,int limit){
    if(u==T)return limit;
    int flow=0,k;
    for(int i=cur[u];i&&flow<limit;i=edge[i].next){
        cur[u]=i;
        int v=edge[i].v;
        int w=edge[i].w;
        if(w&&d[v]==d[u]+1){
            k=dfs(v,min(w,limit-flow));
            if(!k)d[v]=0;
            edge[i].w-=k;
            edge[i^1].w+=k;
            flow+=k;
        }

    }
    return flow;
}



int dinic(){
    int maxflow=0,flow;
    while(bfs())while(flow=dfs(S,INF))maxflow+=flow;
    return maxflow;
}


int id[210][210];
int main(){
    int n,m,k;
    scanf("%d%d%d",&n,&m,&k);
    S=2e5;
    T=S+1;
    for(int i=1;i<=n;i++){
        add(S,i,1,0);
    }
    for(int i=1;i<=m;i++){
        add(i+n,T,1,0);
    }
    for(int i=1;i<=k;i++){
        int x1,x2,y1,y2;
        scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
        int u=i+n+m;
        int v=i+n+m+2*k;
        for(int j=x1;j<=x2;j++){
            add(j,u,1,0);
        }
        add(u,v,1,0);
        for(int j=y1;j<=y2;j++){
            add(v,j+n,1,0);
        }
    }
    cout<<dinic();
    return 0;
}


全部评论

相关推荐

来,说点可能被同行“骂”的大实话。🙊当初接数字马力Offer时,朋友都说:“蚂蚁的“内包”公司?你想清楚啊!”但入职快一年后的今天,我反而对他有了不一样的看法!🔹&nbsp;是偏见?还是信息差!之前没入职之前外面都在说什么岗位低人一等这类。实际上:这种情况不可至否,不能保证每个团队都是其乐融融。但我在的部门以及我了解的周边同事都还是十分好相处的~和蚂蚁师兄师姐之间也经常开一些小玩笑。总之:身份是蚂蚁公司给的,地位是自己挣的(一个傲娇女孩的自述)。🔹&nbsp;待遇?玩的就是真实!试用期工资全额发!六点下班跑得快(早9晚6或者早10晚7,动态打卡),公积金顶格交。别听那些画饼的,到手的钱和下班的时间才是真的(都是牛马何必难为牛马)。🔹&nbsp;能不能学到技术?来了就“后悔”!我们拥有权限直通蚂蚁知识库,技术栈多到学不完。说“学不到东西”的人,来了可能后悔——后悔来晚了(哈哈哈哈,可以不学但是不能没有)!💥&nbsp;内推地址:https://app.mokahr.com/su/ueoyhg❗我的内推码:NTA6Nvs走我的内推,可以直达业务部门,面试流程更快速,进度可查!今天新放HC,之前挂过也能再战!秋招已经正式开始啦~机会就摆在这,敢不敢来试一试呢?(和我一样,做个勇敢的女孩)
下午吃泡馍:数字马力的薪资一般哇,5年经验的java/测试就给人一万出头,而且刚入职第三天就让人出差,而且是出半年
帮你内推|数字马力 校招
点赞 评论 收藏
分享
10-31 13:04
南华大学 Java
嵌入式的小白:很多面试,面试前不会去打扰cto的,但一般cto不会在这些小事上刷人,只能说这个cto比较操心,啥重要不重要,紧急不紧急的,估计都会过问,平淡看待吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务