Cod sursa(job #582188)
#include<vector>
#include<stdio.h>
#define M 10003
using namespace std;
FILE *F=fopen("cuplaj.in","r");
FILE *G=fopen("cuplaj.out","w");
vector<int> a[M];
vector<int>::iterator it;
int l[M], r[M],n;
bool viz[M];
void cit()
{
int i,e,x,y,m;
fscanf(F,"%d%d%d",&n,&m,&e);
for(i=1;i<=e;++i)
{
fscanf(F,"%d%d",&x,&y);
a[x].push_back(y);
}
fclose(F);
}
void afis()
{
int i;
for(i=1;i<=n;++i)
if(l[i])
fprintf(G,"%d %d\n",i,l[i]);
fclose(G);
}
int pereche(int x)
{
if(viz[x]) return 0;
viz[x]=1;
for(it=a[x].begin();it!=a[x].end();++it)
if(r[*it]==0 || pereche(r[*it]))
{
l[x]=*it;
r[*it]=x;
return 1;
}
return 0;
}
void cuplaj()
{
int ok=1, i;
long c=0;
while(ok)
{
ok=0;
memset(viz, 0, sizeof(bool)*(n+1));
for(i=1;i<=n;++i)
if(l[i]==0)
if(pereche(i))
{
++c;
ok=1;
}
}
fprintf(G,"%ld\n",c);
}
int main()
{
cit();
cuplaj();
afis();
return 0;
}