Pagini recente » Cod sursa (job #2515002) | Cod sursa (job #1442111) | Cod sursa (job #1660423) | Cod sursa (job #995501) | Cod sursa (job #950185)
Cod sursa(job #950185)
// Berceanu Cristian
#define MAXN 10005
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
vector <int> G[MAXN];
int l[MAXN], r[MAXN], u[MAXN];
int cuplaj(const int n)
{
vector <int>::iterator it;
if (u[n]) return 0;
u[n] = 1;
for(it=G[n].begin();it!=G[n].end();++it)if (!r[*it]) {
l[n] = *it;
r[*it] = n;
return 1;
}
for(it=G[n].begin();it!=G[n].end();++it) if (cuplaj(r[*it])) {
l[n] = *it;
r[*it] = n;
return 1;
}
return 0;
}
int main(void)
{
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
int n, m, c;
scanf("%d %d %d", &n, &m, &c);
for (; c--; )
{
int x, y;
scanf("%d %d", &x, &y);
G[x].push_back(y);
}
for (int ok = 1; ok; )
{
ok = 0;
memset(u, 0, sizeof(u));
for(int i=1;i<=n;++i) if (!l[i])
ok |= cuplaj(i);
}
int cup = 0;
for(int i=1;i<=n;++i) cup += (l[i] > 0);
printf("%d\n", cup);
for(int i=1;i<=n;++i) if (l[i] > 0)
printf("%d %d\n", i, l[i]);
return 0;
}