6 3 3 1 1 1 2 1 3 2 1 2 3 3 1 0
3
#include <stdio.h> #include <string.h> #define SIZE 550 int pre[SIZE] ; int k , m , n ; bool vis[SIZE] , graph[SIZE][SIZE] ; int find(int pos) { for(int i = 0 ; i <= n ; ++i) { if(!vis[i] && graph[pos][i]) { vis[i] = true ; if(pre[i] == -1 || find(pre[i])) { pre[i] = pos ; return 1 ; } } } return 0 ; } int main() { while(~scanf("%d",&k) && k) { scanf("%d%d",&m,&n) ; memset(pre,-1,sizeof(pre)) ; memset(graph,false,sizeof(graph)) ; for(int i = 0 ; i < k ; ++i) { int x , y ; scanf("%d%d",&x,&y); graph[x][y] = true ; } int sum = 0 ; for(int i = 1 ; i <= m ; ++i) { memset(vis,false,sizeof(vis)) ; sum += find(i) ; } printf("%d\n",sum) ; } return 0 ; }
hdu 2063 过山车 二分图的最大匹配模板。。感觉模板代码很简洁
原文地址:http://blog.csdn.net/lionel_d/article/details/45313679