Pagini recente » Cod sursa (job #174196) | Cod sursa (job #2785338) | Cod sursa (job #976978) | Cod sursa (job #2070717) | Cod sursa (job #233654)
Cod sursa(job #233654)
#include <cstdio>
#define N 10001
#include <string>
struct nod { int x; nod *n;};
nod *a[N];
int n, m, E;
int l[N], r[N];
bool use[N];
inline void add(int i, int j)
{
nod *p=new nod;
p->x=j;
p->n=a[i];
a[i]=p;
}
void read()
{
freopen("cuplaj.in","r",stdin);
scanf("%d %d %d\n", &n, &m, &E);
int p, q;
while(E--)
{
scanf("%d %d\n", &p, &q);
add(p,q);
}
}
inline bool pairup(int n)
{
if(use[n]) return 0;
use[n]=1;
nod *i;
for(i=a[n]; i; i=i->n)
if(!l[i->x])
{
l[i->x]=n;
r[n]=i->x;
return 1;
}
for(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 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;
}
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()
{
read();
solve();
return 0;
}