题目链接:点击打开链接
题目大意:略。
解题思路:二分图最大匹配 + 匈牙利算法。
AC 代码
#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn=520;
int k,un,vn;
int vis[maxn], linker[maxn], g[maxn][maxn];
void init()
{
mem(linker,-1);
mem(g,0);
}
int dfs(int u)
{
for(int i=1;i<=vn;i++)
{
if(!vis[i]&&g[u][i])
{
vis[i]=1;
if(linker[i]==-1 || dfs(linker[i]))
{
linker[i]=u;
return 1;
}
}
}
return 0;
}
int main()
{
while(~scanf("%d",&k) && k)
{
scanf("%d%d",&un,&vn);
init();
int u,v;
while(k--)
{
scanf("%d%d",&u,&v);
g[u][v]=1;
}
int rs=0;
for(int i=1;i<=un;i++)
{
mem(vis,0);
if(dfs(i)) rs++;
}
printf("%d\n",rs);
}
return 0;
}