Pagini recente » Cod sursa (job #1213936) | Cod sursa (job #2594833) | Cod sursa (job #43235) | Cod sursa (job #1830072) | Cod sursa (job #236260)
Cod sursa(job #236260)
#include<stdio.h>
#define N 1<<14
struct nod{int inf;nod *urm;};
int n,m,e,a,b,i,cd[N],ci[N],viz[N],cuplaje,creste(int ic);
nod *v[N];
void readd(),solve(),prints();
int main()
{ readd();
solve();
prints();
return 0;
}
void readd()
{ nod *paux;
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d%d%d",&n,&m,&e);
for(i=1;i<=e;i++)
{ scanf("%d%d",&a,&b);
paux=new nod;
paux->inf=b;
paux->urm=v[a];
v[a]=paux;
}
}
void solve()
{ int gata=0;
while (!gata)
{ gata=1;
for(i=1;i<=n;i++)viz[i]=0;
for(i=1;i<=n;i++)
if(!cd[i]&&creste(i)){gata=0;cuplaje++;}
}
}
void prints()
{ printf("%d\n",cuplaje);
for(i=1;i<=n;i++)
if(cd[i])printf("%d %d\n",i,cd[i]);
}
int creste(int ic)
{ nod *paux;
if (viz[ic]) return 0;
viz[ic] = 1;
for(paux=v[ic];paux;paux=paux->urm)
if (!ci[paux->inf]){ci[paux->inf]=ic;cd[ic]=paux->inf;return 1;}
for(paux=v[ic];paux;paux=paux->urm)
if (creste(ci[paux->inf])){ci[paux->inf]=ic;cd[ic]=paux->inf;return 1;}
return 0;
}