Pagini recente » Cod sursa (job #2052669) | Cod sursa (job #235539) | Cod sursa (job #2077984) | Cod sursa (job #631353) | Cod sursa (job #1867543)
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
vector <int> v[10010];
bool ap[10010];
int le[10010], ri[10010];
inline int cupleaza (int nod)
{
if (ap[nod]) return 0;
ap[nod] = true;
for (auto &it : v[nod])
if (!ri[it])
{
le[nod] = it;
ri[it] = nod;
return 1;
}
for (auto &it : v[nod])
if (cupleaza (ri[it]))
{
le[nod] = it;
ri[it] = nod;
return 1;
}
return 0;
}
int main ()
{
freopen ("cuplaj.in", "r", stdin);
freopen ("cuplaj.out", "w", stdout);
int n, m, e;
scanf ("%d %d %d", &n, &m, &e);
for (; e; --e)
{
int x, y;
scanf ("%d %d", &x, &y);
v[x].push_back (y);
}
for (int mm = 1; mm;)
{
mm = 0;
for (int i = 1; i <= n; ++i)
ap[i] = false;
for (int i = 1; i <= n; ++i)
if (!le[i]) mm = max (mm, cupleaza (i));
}
int nr = 0;
for (int i = 1; i <= n; ++i)
if (le[i]) ++nr;
printf ("%d\n", nr);
for (int i = 1; i <= n; ++i)
if (le[i]) printf ("%d %d\n", i, le[i]);
return 0;
}