Pagini recente » Cod sursa (job #1956725) | Cod sursa (job #2184165) | Cod sursa (job #2175480) | Cod sursa (job #2406473) | Cod sursa (job #1744058)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct list
{
int x;
list * next;
};
list * g[10009],* p;
int n,m,e,i,j,k,mt[10009];
char u[10009];
int ok;
int next_int()
{
char c=getchar();
while (c>57 || c < 48) c=getchar();
int k=0;
while (c<=57 && c>=48)
{
k=k*10+c-48;
c=getchar();
}
return k;
}
void add(list ** l,int v)
{
p=(list *) malloc(sizeof(list));
p->next=*l;
p->x=v;
*l=p;
}
int dfs(int v)
{
if (u[v]) return 0;
u[v]=1;
for (list * p = g[v]; p ; p=p->next)
if (! mt[p->x] || dfs(mt[p->x]))
{
mt[p->x]=v;
return 1;
}
return 0;
}
int main()
{
FILE * in,*out;
in=freopen("cuplaj.in","r",stdin);
out=freopen("cuplaj.out","w",stdout);
n=next_int();
m=next_int();
e=next_int();
while (e--)
{
i=next_int();
j=next_int();
add(&g[i],j);
}
for (i=1;i<=n;++i)
{
memset(u,0,sizeof(u));
ok=dfs(i);
}
for (i=1;i<=m;++i)
if (mt[i])
k++;
printf("%d\n",k);
for (i=1;i<=m;++i)
if (mt[i])
printf("%d %d\n",mt[i],i);
fclose(in);
fclose(out);
return 0;
}