zoukankan      html  css  js  c++  java
  • 【模板】二分图最大匹配

    https://www.luogu.org/problem/P3386

    注意对匈牙利增广路算法的理解

    #include<iostream>
    #include<cstdio>
    
    #define ri register int
    #define u int
    
    namespace opt {
    
        inline u in() {
            u x(0),f(1);
            char s(getchar());
            while(s<'0'||s>'9') {
                if(s=='-') f=-1;
                s=getchar();
            }
            while(s>='0'&&s<='9') {
                x=(x<<1)+(x<<3)+s-'0';
                s=getchar();
            }
            return x*f;
        }
    
    }
    
    using opt::in;
    
    #define NN 1000005
    
    #include<cstring>
    
    namespace mainstay {
        
        u N,M,E,cnt,vt[NN],to[NN],h[NN];
        
        struct node{
            u to,next;
        }a[NN<<1];
        
        inline void add(const u &x,const u &y){
            a[++cnt].next=h[x],a[cnt].to=y,h[x]=cnt;
        }
        
        u dfs(const u &x){
            if(vt[x]) return 0;
            vt[x]=1;
            for(ri i(h[x]);i;i=a[i].next){
                u _y(a[i].to);
                if(!to[_y]||dfs(to[_y])){
                    to[_y]=x;
                    return 1;
                } 
            }
            return 0;
        }
    
        inline void solve() {
            N=in(),M=in(),E=in();
            for(ri i(1);i<=E;++i){
                u _a(in()),_b(in());
                if(_a<=N&&_b<=M) add(_a,_b);
            }
            u ans(0);
            for(ri i(1);i<=N;++i){
                std::memset(vt,0,sizeof(vt));
                if(dfs(i)) ++ans;
            }
            printf("%d",ans);
        }
    
    }
    
    int main() {
    
        //freopen("x.txt","r",stdin);
        mainstay::solve();
    
    }
  • 相关阅读:
    maven引入tomcat插件
    Maven更新jdk1.7
    ehcashe
    response的json
    ajax
    180411
    清空select标签中option选项
    jackson
    ajax
    mysql主从
  • 原文地址:https://www.cnblogs.com/ling-zhi/p/11865993.html
Copyright © 2011-2022 走看看