在B站上看的算法视频-匈牙利算法
他讲到了一道题
杭电的过山车2063题
代码奉上
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int max_n=1000;
int line[max_n][max_n];//邻接矩阵
int used[max_n];//used[i]表示每一轮当中第i名女生有没有被别的男生占用
int girl[max_n];//girl[i]表示与第i个女生匹配到的男孩
int k,m,n;
bool find(int i)
{
for (int j=1;j<=m;++j)
{
if (line[j][i]&&!used[j])
{
used[j]=1;
if (gao_pi[j]==0||find(gao_pi[j]))
{
gao_pi[j]=i;
return true;
}
}
}
return false;
}
int num_max()
{
int result=0;
for (int i=1;i<=n;++i)
{
memset(used,0,sizeof(used));
if (find(i))
result++;
}
return result;
}
int main()
{
int x,y;
while(scanf("%d",&k)!=EOF&&k!=0)
{
memset(gao_pi,0,sizeof(gao_pi));
memset(line,0,sizeof(line));
scanf("%d%d",&m,&n);
while(k--)
{
scanf("%d%d",&x,&y);
line[x][y]=1;
}
cout<<num_max()<<endl;
}
return 0;
}