#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=505;
int line[N][N];
int girl[N],used[N];
int k,m,n;
bool found(int x)
{
for(int i=1; i<=n; i++)
{
if(line[x][i]&&!used[i])//x与i之间是否有连线,并且男生i没有被匹配过(第一个女生与她联系的第一个男生配对)
{
used[i]=1;//标记男生i被匹配过
if(girl[i]==0||found(girl[i]))//第i个女生还没有匹配或者第I个女生匹配了就回溯
{//先让I女生和X男匹配,再让I-1女生和与她联系的第二个男生匹配
girl[i]=x;
return 1;
}
}
}
return 0;
}
int main()
{
int x,y;
while(scanf("%d",&k)&&k)
{
scanf("%d %d",&m,&n);
memset(line,0,sizeof(line));
memset(girl,0,sizeof(girl));
for(int i=0; i<k; i++)
{
scanf("%d %d",&x,&y);
line[x][y]=1;
}
int sum=0;
for(int i=1; i<=m; i++)
{
memset(used,0,sizeof(used));
if(found(i))
sum++;
}
printf("%d\n",sum);
}
return 0;
}
五河士道家里的精灵越来越多了,而每一个精灵都想和他有一个约会。然而五河士道却只有一个,无奈之下只能使出分身帮自己解围。
不过并不是所有的精灵都同意这样做,有些精灵不愿意和士道分身进行约会,也有部分精灵同时选择同一个分身进行约会。
假设有N个分身,精灵的数量为M,可能的约会组合有K组。
设N=3,M=5,K=5,可能的组合为1-1,1-3,2-4,3-4,3-5(如下图),为了避免冲突,我们最多可以选择1-1,2-4,3-5一共三种组合(或者是1-3,2-4,3-5)
那么请设计一个程序判断每一次可能的组队最多能确定多少队伍?最后,让我们的约会开始吧~