Pagini recente » Cod sursa (job #1594865) | Cod sursa (job #987543) | Cod sursa (job #1272046) | Istoria paginii utilizator/deea.andie | Cod sursa (job #293457)
Cod sursa(job #293457)
#include <cstdio>
#include <cstring>
#include <vector>
#define maxn 10100
#define maxe 100100
using namespace std;
int n, m, e, i, j, a, b, ok, sol;
vector <int> v[2 * maxn];
int viz[2 * maxn], cuplat[2 * maxn], cp[2 * maxn];
void df(int nod) {
int i, fiu;
if (viz[nod])
return;
viz[nod] = 1;
if (nod <= n) {
for (i = 0; i < v[nod].size(); i++) {
fiu = v[nod][i];
df(fiu);
if (ok) {
cuplat[fiu] = nod;
cp[nod] = fiu;
return;
}
}
}
else {
//is in partea dreapta, daca nod nu e cuplat am gasit lant, altfel merg in ala cu care e cuplat
if (cuplat[nod])
df(cuplat[nod]);
else {
ok = 1;
return;
}
}
}
int main() {
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", &a, &b);
b += n;
v[a].push_back(b);
}
for (i = 1; i <= n; i++)
if (!cp[i]) {
ok = 0;
memset(viz, 0, sizeof(viz));
df(i);
sol += ok;
}
printf("%d\n", sol);
for (i = n + 1; i <= n + m; i++)
if (cuplat[i])
printf("%d %d\n", cuplat[i], i - n);
return 0;
}