Pagini recente » Cod sursa (job #1464817) | Cod sursa (job #942540) | Cod sursa (job #2528991) | Rating Vlad Mim (VladMim) | Cod sursa (job #302879)
Cod sursa(job #302879)
#include <cstdio>
#include <vector>
using namespace std;
#define FIN "cuplaj.in"
#define FOUT "cuplaj.out"
#define MAX_N 10005
vector <int> G[MAX_N];
int N, M, E, cnt;
int dest[MAX_N], p[MAX_N], v[MAX_N];
int pairup (int nod)
{
v[nod] = 1;
int i;
for (i = 0; i < G[nod].size(); ++i)
if (!dest[G[nod][i]])
{
dest[G[nod][i]] = nod;
p[nod] = G[nod][i];
return 1;
}
for (i = 0; i < G[nod].size(); ++i)
if (!v[ dest[G[nod][i]] ])
if (pairup(dest[G[nod][i]]))
{
dest[G[nod][i]] = nod;
p[nod] = G[nod][i];
return 1;
}
return 0;
}
void solve ()
{
int ok = 1, i;
while (ok)
{
ok = 0;
memset (v, 0, sizeof (v));
for (i = 1; i <= N; ++i)
if (!p[i])
if (pairup(i))
{
++cnt;
ok = 1;
}
}
printf ("%d\n", cnt);
for (i = 1; i <= N; ++i)
if (p[i]) printf ("%d %d\n", i, p[i]);
}
int main ()
{
freopen (FIN, "r", stdin);
freopen (FOUT, "w", stdout);
scanf ("%d %d %d", &N, &M, &E);
while (E--)
{
int a, b;
scanf ("%d %d", &a, &b);
G[a].push_back(b);
}
solve();
return 0;
}