Pagini recente » Cod sursa (job #502834) | Cod sursa (job #1000988) | Cod sursa (job #1032894) | Cod sursa (job #2387950) | Cod sursa (job #421060)
Cod sursa(job #421060)
#include <stdio.h>
#include <vector>
#include <string.h>
#define nmax 10005
using namespace std;
int cp, n, m, e, b [nmax], c [nmax];
vector <int> a [nmax];
bool v [nmax];
void scan ()
{
int i, x, y;
scanf ("%d%d%d", &n, &m, &e);
for (i=1; i <= e; ++i)
{
scanf ("%d%d", &x, &y);
a [x].push_back (y);
}
}
bool pairup (int x)
{
v [x]=true;
int i;
for (i=0; i != a [x].size (); ++i)
if (!c [a [x] [i]])
{
c [a [x] [i]]=x;
b [x]=a [x] [i];
return true;
}
for (i=0; i != a [x].size (); ++i)
if (!v [c [a [x] [i]]] && pairup (c [a [x] [i]]))
{
c [a [x] [i]]=x;
b [x]=a [x] [i];
return true;
}
return false;
}
void cuplaj ()
{
int k, i;
do
{
k=0;
memset (v, 0, sizeof (v));
for (i=1; i <= n; ++i)
if (!b [i])
{
if (pairup (i))
{
++cp;
k=1;
}
}
} while (k);
}
void print ()
{
printf ("%d\n", cp);
int i;
for (i=1; i <= n; ++i)
if (b [i] != 0) printf ("%d %d\n", i, b [i]);
}
int main ()
{
freopen ("cuplaj.in", "r", stdin);
freopen ("cuplaj.out", "w", stdout);
scan ();
cuplaj ();
print ();
return 0;
}