Pagini recente » Cod sursa (job #2648393) | Cod sursa (job #1038847) | Cod sursa (job #633845) | Cod sursa (job #1557997) | Cod sursa (job #240111)
Cod sursa(job #240111)
#include <cstdio>
#include <cstring>
#define N 10001
typedef struct noduri
{
int val;
noduri *urm;
} adr;
int n,m,e,i,j,tata[N],x,y;
short int E[N];
adr *L[N],*p;
int dfs(int x)
{
adr *p;
if (x==-1) return 1;
if (E[x]) return 0;
E[x] = 1;
for (p=L[x]; p; p=p->urm)
if (dfs(tata[p->val]))
{
tata[p->val] = x;
return 1;
}
return 0;
}
int flux()
{
int rez=0;
memset(tata,-1,sizeof(tata));
for (i=1; i<=n; i++)
{
memset(E,0,sizeof(E));
if (dfs(i)) rez++;
}
return rez;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d%d%d\n",&n,&m,&e);
for (i=1; i<=e; i++)
{
scanf("%d%d\n",&x,&y);
p=new adr;
p->val=y; p->urm=L[x];
L[x]=p;
}
printf("%d\n",flux());
for (i=1; i<=n; i++)
if (tata[i]>0) printf("%d %d\n",tata[i],i);
return 0;
}