您的位置:首页 > 其它

HDU-2063(简单二分匹配)

2012-07-28 12:54 211 查看
这是一道适合刚入门二分匹配的同志需要做的.0.-!

题目的意思很好理解,我就不说了,主要说一下,增广路问题,其实从增广路这字面上也很好理解,增广路 不就是在原来的基础上 你想办法满足以前的题意,再找出一条满足的路么?

其实遇到的新知识点就是存路的思路.找到的路不一定就定死了,如果有更好的咱们还是需要 更新的.我觉得这就是增广路的精华吧?

贴出代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

int N,M,K;
int map[505][505];
int link[505];
int visit[505];

int getnum(int x)
{
for(int i=1;i<=M;i++)
{
if(!visit[i]&&map[x][i])
{
visit[i]=1;
if(!link[i]||getnum(link[i]))
{
link[i]=x;
return 1;
}
}
}
return 0;
}

int main()
{
while(scanf("%d",&K),K)
{
scanf("%d%d",&N,&M);
int count=0;
int a,b;
memset(map,0,sizeof(map));
memset(link,0,sizeof(link));
for(int i=1;i<=K;i++)
{
scanf("%d%d",&a,&b);
map[a][b]=1;
}
for(int j=1;j<=N;j++)
{
memset(visit,0,sizeof(visit));
if(getnum(j))
count++;
}
printf("%d\n",count);
}
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: