模板:匈牙利算法

Posted leonard-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板:匈牙利算法相关的知识,希望对你有一定的参考价值。

 1 /*
 2 公式:
 3 二分图最小顶点覆盖 = 二分图最大匹配
 4 DAG图的最小路径覆盖 = 节点数(n)- 最大匹配数
 5 二分图最大独立集 = 节点数(n)- 最大匹配数
 6 */
 7 
 8 #include <bits/stdc++.h>
 9 using namespace std;
10 
11 const int N=1234;
12 int n1,n2,k;
13 bool M[N][N],vis[N];
14 int Link[N];
15 
16 bool Find(int x){
17     for(int i=1;i<=n2;i++){
18         if(M[x][i]&&!vis[i]){
19             vis[i]=1;
20             if(!Link[i]||Find(Link[i])){
21                 Link[i]=x;
22                 return true;
23             }
24         }
25     }
26     return false;
27 }
28 
29 int main(){
30     int x,y,ans=0;
31     scanf("%d%d%d",&n1,&n2,&k);
32     for(int i=1;i<=k;i++){
33         scanf("%d%d",&x,&y);
34         M[x][y]=1;
35     }
36     for(int i=1;i<=n1;i++){
37         memset(vis,0,sizeof(vis));
38         if(Find(i)) ans++;
39     }
40     printf("%d\n",ans);
41     return 0;
42 }

 

以上是关于模板:匈牙利算法的主要内容,如果未能解决你的问题,请参考以下文章

二分图匹配(匈牙利算法模板)

POJ 3041 匈牙利算法模板题

匈牙利算法模板BZOJ1191-超级英雄

匈牙利 算法&模板

二分图匹配——匈牙利算法

匈牙利算法dfs模板 [二分图][二分图最大匹配]