[模板] 匈牙利算法

Posted Neworld2002

tags:

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

推荐一篇Blog

//Hungarian Algorithm
#include<cstdio>
#include<cstring>
#define MAXN 1005
using namespace std;

int link[MAXN],head[MAXN];
bool vis[MAXN];
int N,M,E,tot=0;
struct size{
	int v,next;
}G[MAXN*MAXN];

inline void add(int u,int v){
	G[++tot].v=v;G[tot].next=head[u];head[u]=tot;
}

inline bool dfs(int u){
	
	for(register int i=head[u];i;i=G[i].next){
		int v = G[i].v;
		if(vis[v]==0){
			vis[v]=1;
			if(link[v]==0||dfs(link[v])){
				link[v]=u;vis[u]=1;return 1;
			}
		}
	}
	return 0;
} 
int main(){
	
	scanf("%d%d%d",&N,&M,&E);
	int u,v;
	for(register int i=1;i<=E;++i){
		scanf("%d%d",&u,&v);
		if(v>M)continue;
		add(u,v);
	}
	
	int ans = 0;
	for(register int i=1;i<=N;++i){
		memset(vis,0,sizeof(vis));
		if(dfs(i))ans++;
	}
	printf("%d",ans);
	return 0;
} 

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

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

POJ 3041 匈牙利算法模板题

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

匈牙利 算法&模板

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

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