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

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

    时间复杂度O(m√n)

     1 #include<set>
     2 #include<cmath>
     3 #include<ctime>
     4 #include<stack>
     5 #include<queue>
     6 #include<cstdio>
     7 #include<vector>
     8 #include<cstring>
     9 #include<cstdlib>
    10 #include<iostream>
    11 #include<algorithm>
    12 #define N 3001
    13 #define M 200001
    14 using namespace std;
    15 struct graph{
    16     int nxt,to;
    17 }e[M];
    18 int g[N],fr[N],n,m,cnt;
    19 bool u[N];
    20 inline void addedge(int x,int y){
    21     e[++cnt].nxt=g[x];g[x]=cnt;e[cnt].to=y;
    22 }
    23 inline bool match(int x){
    24     for(int i=g[x];i;i=e[i].nxt)
    25         if(!u[e[i].to]){
    26             u[e[i].to]=true;
    27             if(!fr[e[i].to]||match(fr[e[i].to])){
    28                 fr[e[i].to]=x;return true;
    29             }
    30         }
    31     return false;
    32 }
    33 inline int hungary(){
    34     int ret=0;
    35     for(int i=1;i<=n;i++){
    36         fill(u+1,u+1+n,false);
    37         if(match(i)) ret++;
    38     }
    39     return ret;
    40 }
    41 inline void init(){
    42     scanf("%d%d",&n,&m);
    43     for(int i=1,j,k;i<=m;i++){
    44         scanf("%d%d",&j,&k);
    45         addedge(j,k);
    46     }
    47     printf("%d",hungary());
    48 }
    49 int main(){
    50     freopen("hungary.in","r",stdin);
    51     freopen("hungary.out","w",stdout);
    52     init();
    53     fclose(stdin);
    54     fclose(stdout);
    55 }
  • 相关阅读:
    apache 错误日志
    搭建服务器
    vim配置
    临时表增加查询速度
    如何清空$_POST or $_GET
    hdu 2084
    快速幂
    zjut 1176
    rwkj 1091
    zjut 1090 --------同余定理的应用
  • 原文地址:https://www.cnblogs.com/AireenYe/p/5656237.html
Copyright © 2011-2022 走看看