hdu 1150

题目 :Problem - 1150 (hdu.edu.cn)

#include<bits/stdc++.h>
using namespace std;
#define MXN 110
int n,m,g[MXN][MXN],linker[MXN];
bool used[MXN];
bool dfs(int a){
	for(int i=0;i<m;i++){
		if(g[a][i]==1&&used[i]!=1){
			used[i]=true;
			if(linker[i]==-1||dfs(linker[i])==1){
				linker[i]=a;
				return true;
			}
		}
	}
	return false;
}
int hungary(){
	int res=0;
	memset(linker,-1,sizeof linker);
	for(int i=0;i<n;i++){
		memset(used,false,sizeof used);
		if(dfs(i)){
			res++;
		}
	}
	return res;
}
int main(){
	int k,a,x,y;
	while(scanf("%d",&n)==1&&n){
		memset(g,0,sizeof g);
		scanf("%d %d",&m,&k);
		while(k--){
			scanf("%d %d %d",&a,&x,&y);
			if(x!=0&&y!=0){
				g[x][y]=1;
			}
		}
		printf("%d\n",hungary());
	}
	return 0;
}

上一篇:PAT甲级 1150 Travelling Salesman Problem (25 分)


下一篇:JavaScript简介