#include <stdio.h>
#include <string.h>
const int maxv = 505;
const int maxe = 1005;
int k, n, m;
int l= 0;
int head[maxv];
int linker[maxv];
bool vis[maxv];
struct eage
{
int v;
//int w;
int next;
}e[maxe];
void init()
{
memset(head,-1,sizeof(head));
l = 0;
}
void add(int u, int v)
{
e[l].v = v;
e[l].next = head[u];
head[u] = l;
l ++;
}
/*
bool bfs0(int u)
{
for(int v=1; v<=m ;v++)
{
if(g[u][v] && vis[v] == false)
{
vis[v] = true;
if(linker[v] == -1 || bfs(linker[v]))
{
linker[v] = u;
return true;
}
//}
}
return false;
}
*/
bool bfs(int u)
{
for(int i = head[u]; i!=-1; i = e[i].next)
{
int v = e[i].v;
if(vis[v] == false)
{
vis[v] = true;
if(linker[v] == -1 || bfs(linker[v]))
{
linker[v] = u;
return true;
}
}
}
return false;
}
void solve()
{
int ans = 0;
memset(linker, -1, sizeof(linker));
for(int i=1; i<=m; i++)
{
memset(vis, false, sizeof(vis));
if(bfs(i))ans ++;
}
printf("%d\n", ans);
}
int main()
{
while(scanf("%d", &k), k)
{
scanf("%d%d", &m, &n);
init();
while(k --)
{
int a, b;
scanf("%d%d", &a, &b);
add(a, b);
}
solve();
}
}
二分匹配
最新推荐文章于 2023-02-15 00:00:15 发布