Pagini recente » Cod sursa (job #2721175) | Cod sursa (job #1543016) | Infiintarea Asociatiei infoarena | Cod sursa (job #235029) | Cod sursa (job #2730192)
#include <bits/stdc++.h>
using namespace std;
#define NMAX 10004
vector <int> v[NMAX];
bool ap[NMAX];
int le[NMAX], ri[NMAX];
inline int bipartiteMatching (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 (bipartiteMatching (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, bipartiteMatching (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;
}