首页 > 其他 > 详细

HDU 2603 二分匹配

时间:2015-08-08 10:28:04      阅读:146      评论:0      收藏:0      [点我收藏+]

#include <queue>
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

const int N = 510;
int maps[N][N], visit[N], used[N];
int n, m;
bool Find(int u)//女生u
{
for(int i=1; i<=n; i++)
{
if(!visit[i]&&maps[u][i])//i男生
{
visit[i]=1;
if(!used[i]||Find(used[i]))
{
used[i]=u;
return true;
}
}
}
return false;
}
int main()
{
int k;
while(scanf("%d", &k), k)
{
scanf("%d%d", &m, &n);
memset(maps, 0, sizeof(maps));
while(k--)
{
int a, b;
scanf("%d%d", &a, &b);
maps[a][b]=1;//有伴
}//used[i]表示第i个男生和used[i]女生作伴
memset(used, 0, sizeof(used));
int ans=0;
for(int i=1; i<=m; i++)
{
//visit[i]表示i男生有没有被增广过
memset(visit, 0, sizeof(visit));
if(Find(i))
ans++;
}
printf("%d\n", ans);
}
return 0;
}

HDU 2603 二分匹配

原文:http://www.cnblogs.com/wazqWAZQ1/p/4712629.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!