读书人

hdu 2063 过山车(小弟我的第一个二分

发布时间: 2012-10-28 09:54:44 作者: rapoo

hdu 2063 过山车(我的第一个二分图)

过山车

Time Limit: 1000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3105????Accepted Submission(s): 1298

#include <iostream>#include <stdio.h>#include <memory.h>using namespace std;const int N = 505;bool map[N][N], flag[N];int pre[N];int n, m, num;//匈牙利算法(二分匹配)int find(int cur) //cur为当前女生{ int i; for(i = 1; i <= m; i++) //被匹配的男生 { if(map[cur][i] && !flag[i]) //该男生未被匹配 { flag[i] = true; //这次匹配中,标记该男生已匹配 if(pre[i] == -1 || find(pre[i]))//该男生没有被女生匹配 or 该女生继续找其他男生 -> ok { pre[i] = cur; //男生[i]属于女生cur return 1; } } } return 0;}int main(){ int i, girl, boy, sum; while(scanf("%d", &num), num) { scanf("%d %d", &n, &m); //n是女生数量,m是男生数量 memset(map, false, sizeof(map)); memset(pre, -1, sizeof(pre)); for(i = 0; i < num; i++) { scanf("%d %d", &girl, &boy); map[girl][boy] = true; //可以匹配 } sum = 0; for(i = 1; i <= n; i++) //女生去匹配男生 { memset(flag, 0, sizeof(flag)); //每次重新标记0 sum += find(i); } printf("%d\n", sum); } return 0;}?

读书人网 >编程

热点推荐