Pagini recente » Arhiva de probleme | Cod sursa (job #1761144) | Cod sursa (job #1305931) | Cod sursa (job #2014667) | Cod sursa (job #233653)
Cod sursa(job #233653)
#include <cstdio>
#include <string>
struct nod {int x;nod *urm;};
nod *A[10001];
int l[10001],r[10001];
bool use[10001];
inline bool pairup(int x)
{
if (use[x]) return 0;
use[x]=1;
nod *i;
for (i=A[x]; i;i=i->urm);
if (!l[i->x])
{
l[i->x]=x;
r[x]=i->x; printf("%d",x);scanf("\n");
return 1;
}
for (i=A[x]; i;i=i->urm)
if (pairup(l[i->x]))
{
l[i->x]=x;
r[x]=i->x;
return 1;
}
return 0;
}
int main()
{
FILE *in = fopen("cuplaj.in","r");
FILE *out = fopen("cuplaj.out","w");
int n,m,e,x,y;
nod *urm;
fscanf(in,"%d %d %d\n",&n,&m,&e);
for (;e;e--)
{
fscanf(in,"%d %d\n",&x,&y);
urm = new nod;
urm->x = y;
urm->urm = A[x];
A[x] = urm;
}
int flow=0,ok=1,i;
while (ok)
{
ok=0;
memset(use,0,sizeof(use));
for (i=1;i<=n;++i)
if (!r[i]) if (pairup(i)) ++flow,ok=1;
}
fprintf(out,"%d\n",flow);
for (i=1;i<=n;i++)
if (r[i]) fprintf(out,"%d %d\n",i,r[i]);
}