Pagini recente » Cod sursa (job #9581) | Cod sursa (job #31936) | Cod sursa (job #249995) | Cod sursa (job #1224883) | Cod sursa (job #301352)
Cod sursa(job #301352)
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
const int MAX_N = 10100;
int n, m, e, sol;
int f[MAX_N], c[MAX_N], c2[MAX_N];
vector <int> v[MAX_N];
int cuplaj(int nod)
{
if (f[nod]) return 0;
f[nod] = 1;
for (vector <int>::iterator it = v[nod].begin(); it != v[nod].end(); ++it)
if (!c[*it])
{
c[*it] = nod;
c2[nod] = 1;
return 1;
}
else if (c[*it] != nod && cuplaj(c[*it]))
{
c[*it] = nod;
c2[nod] = 1;
return 1;
}
return 0;
}
int main()
{
int i, x, y;
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
scanf("%d %d %d", &n, &m, &e);
for (i = 1; i <= e; ++i)
{
scanf("%d %d", &x, &y);
v[x].push_back(y);
}
int ok = 1;
while (ok)
{
ok = 0;
memset(f, 0, sizeof(f));
for (i = 1; i <= n; ++i)
{
int q = (c2[i]) ? 0 : cuplaj(i);
sol += q;
ok |= q;
}
}
printf("%d\n", sol);
for (i = 1; i <= n; ++i)
if (c[i]) printf("%d %d\n", c[i], i);
}