过山车
队题目很坑,不知道为什么替换了在寻找配对是的n和m位置就可以ac了,不然的话一直wrong。
#include <stdio.h>
#include <string.h>
#define CL(x,v);memset(x,v,sizeof(x));
const int maxn = 500 + 10;
int n,m,link[maxn];
bool used[maxn],graph[maxn][maxn];
int Find(int u)
{
for(int v = 1;v <= m;v++)
if(!used[v]&&graph[u][v])
{
used[v] = 1;
if(link[v] == -1||Find(link[v]))
{
link[v] = u;
return 1;
}
}
return 0;
}
int KM()
{
int res = 0;
CL(link,-1);
for(int u = 1;u <= n;u++)
{
CL(used,0);
res += Find(u);
}
return res;
}
int main()
{
int k,i,j,a,b;
while(scanf("%d",&k),k)
{
CL(graph,0);
scanf("%d%d",&n,&m);
for(i = 0;i < k;i++)
{
scanf("%d%d",&a,&b);
graph[a][b] = 1;
}
printf("%d\n",KM());
}
return 0;
}