#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
#define MAXN 1000
int um,vm;
int n,m;
int g[MAXN][MAXN];
int linked[MAXN];
int vis[MAXN];
int find(int x)
{
for(int u=1;u<=um;u++)
{
if(!vis[u]&&g[x][u])
{
vis[u]=1;
if(!linked[u]||find(linked[u]))
{
linked[u]=x;
return 1;
}
}
}
return 0;
}
int hun()
{
memset(linked,0,sizeof(linked));
int ans=0;
for(int v=1;v<=vm;v++)
{
memset(vis,0,sizeof(vis));
if(find(v)) ans++;
}
return ans;
}
int main()
{
cin>>vm>>um;
int a,b;
memset(g,0,sizeof(g));
while(cin>>a>>b)
{
if(a==-1&&b==-1) break;
g[a][b]=1;
}
cout<<hun()<<endl;
return 0;
}
匈牙利算法
最新推荐文章于 2025-05-13 17:49:36 发布