您的位置:首页 > 其它

HDU 2063 过山车(匈牙利算法)

2017-01-06 08:50 375 查看
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=500+5;
bool line[maxn][maxn],used[maxn];
int gril[maxn];
int k,m,n;
bool find(int x)
{
for(int j=1;j<=n;j++)
{
if(line[x][j]&&!used[j])
{
used[j]=true;
if(gril[j]==-1||find(gril[j]))
{
gril[j]=x;
return true;
}
}
}
return false;
}
int main()
{
while(scanf("%d",&k)&&k)
{
memset(line,false,sizeof(line));
memset(gril,-1,sizeof(gril));
scanf("%d%d",&m,&n);
for(int i=0;i<k;i++){
int u,v;
scanf("%d%d",&u,&v);
line[u][v]=true;
}
int ans=0;
for(int i=1;i<=m;i++){
memset(used,false,sizeof(used));
if(find(i)) ans+=1;
}
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: