您的位置:首页 > 其它

HDU 2063 过山车(二分图最大匹配问题)

2012-07-16 20:36 225 查看
/*
基础的二分图最大匹配问题
*/

#include <iostream>
using namespace std;

const int nMax = 505;
int map[nMax][nMax];//存储男女匹配模式
int link[nMax];//与第i个女生相匹配的男生
int useif[nMax];//是否被访问
int K, M, N;

bool can(int t)
{
for(int i = 1; i <= N; ++ i)
{
if(!useif[i] && map[t][i])
{
useif[i] = 1;
if(link[i] == -1 || can(link[i]))//检查link[i]是否存在另外的匹配
{
link[i] = t;
return 1;
}
}
}
return 0;
}

int main()
{
//freopen("f://data.in", "r", stdin);
while(1)
{
scanf("%d", &K);
if(K == 0) break;
scanf("%d%d", &M, &N);
memset(map, 0, sizeof(map));
memset(link, -1, sizeof(link));
for(int i = 0; i < K; ++ i)
{
int u, v;
scanf("%d%d", &u, &v);
map[u][v] = 1;
}
int num = 0;
for(int i = 1; i <= M; ++ i)
{
memset(useif, 0, sizeof(useif));
if(can(i)) ++ num;//对M个女生进行查找增广轨
}
printf("%d\n", num);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  存储