Pagini recente » Cod sursa (job #860888) | Cod sursa (job #890739) | Cod sursa (job #330912) | Cod sursa (job #3216247) | Cod sursa (job #293700)
Cod sursa(job #293700)
#include <cstdio>
#define N 10001
struct nod
{
int x;
nod *n;
};
int n1, n2, m;
int l[N], r[N];
bool use[N];
nod *a[N];
inline bool pairup(int n)
{
if(use[n]) return 0;
use[n]=1;
for(nod *i=a[n]; i; i=i->n)
if(!l[i->x])
{
l[i->x]=n;
r[n]=i->x;
return 1;
}
for(nod *i=a[n]; i; i=i->n)
if(pairup(l[i->x]))
{
l[i->x]=n;
r[n]=i->x;
return 1;
}
return 0;
}
void solve()
{
int ok=1;
int i;
int flow=0;
int n=n1;
while(ok)
{
ok=0;
for(i=0; i <= n; ++i) use[i]=0;
for(i=1; i <= n; ++i)
if(!r[i])
if(pairup(i)) ok=1,++flow;
}
freopen("cuplaj.out","w",stdout);
printf("%d\n", flow);
for(i=1; i <= n; ++i)
if(r[i]) printf("%d %d\n", i, r[i]);
}
int main()
{
freopen("cuplaj.in","r",stdin);
scanf("%d %d %d\n", &n1, &n2, &m);
int p, q;
while(m--)
{
scanf("%d %d\n", &p, &q);
nod *t=new nod;
t->x=q;
t->n=a[p];
a[p]=t;
}
solve();
return 0;
}