先推荐一下点击打开链接 博主的原理,写的真好;
#include <iostream>
#include <string.h>
using namespace std;
const int maxn=1e5+10;
int girl[maxn];
int used[maxn];
int line[1100][1100];
int m,n;
bool find(int x)
{
for (int i=1;i<=m;i++) //枚举女生
{
if (line[x][i]&&!used[i]) //有关系并且没被用过
{
used[i]=1;
if (girl[i]==0||find(girl[i])) //名花无主或者能腾
{
girl[i]=x;
return true;
}
}
}
return false;
}
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
memset(girl,0,sizeof(girl));
int ans=0;
// 输入关系
for (int i=1;i<=n;i++) //枚举男生
{
memset(used,0,sizeof(used));
if (find(i)) ans++;
}
cout<<ans<<endl;
}