zoukankan      html  css  js  c++  java
  • [模板]匈牙利算法

    \(JSOI\)写匈牙利的时候写炸了\(QAQ\),我要好好补基础。

    时间复杂度:\(O(m\sqrt{n})\)

    #include<set>
    #include<cmath>
    #include<ctime>
    #include<stack>
    #include<queue>
    #include<cstdio>
    #include<vector>
    #include<cstring>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    #define N 3001
    #define M 200001
    using namespace std;
    struct graph{
        int nxt,to;
    }e[M];
    int g[N],fr[N],n,m,cnt;
    bool u[N];
    inline void addedge(int x,int y){
        e[++cnt].nxt=g[x];g[x]=cnt;e[cnt].to=y;
    }
    inline bool match(int x){
        for(int i=g[x];i;i=e[i].nxt)
            if(!u[e[i].to]){
                u[e[i].to]=true;
                if(!fr[e[i].to]||match(fr[e[i].to])){
                    fr[e[i].to]=x;return true;
                }
            }
        return false;
    }
    inline int hungary(){
        int ret=0;
        for(int i=1;i<=n;i++){
            fill(u+1,u+1+n,false);
            if(match(i)) ret++;
        }
        return ret;
    }
    inline void init(){
        scanf("%d%d",&n,&m);
        for(int i=1,j,k;i<=m;i++){
            scanf("%d%d",&j,&k);
            addedge(j,k);
        }
        printf("%d",hungary());
    }
    int main(){
        freopen("hungary.in","r",stdin);
        freopen("hungary.out","w",stdout);
        init();
        fclose(stdin);
        fclose(stdout);
    }
  • 相关阅读:
    显式接口实现
    工厂模式总结
    xml操作总结
    抽象类与接口异同
    (转载)将一段符合XML格式规范字符串插入已有XML文档当中
    观察者模式-最终话
    观察者模式
    泛型编程
    迭代器模式
    python学习笔记1 -- 面向对象编程高级编程1
  • 原文地址:https://www.cnblogs.com/AireenYe/p/Hungary.html
Copyright © 2011-2022 走看看