Pagini recente » Cod sursa (job #585170) | Cod sursa (job #252408) | Cod sursa (job #352962) | Cod sursa (job #175509) | Cod sursa (job #875224)
Cod sursa(job #875224)
#include <cstdio>
#include <vector>
using namespace std;
namespace cup {
int n, m;
vector<vector<int> > G;
int L[10100], R[10100], viz[10100];
int pair_up(int nod) {
if (viz[nod]) return 0;
viz[nod] = 1;
for (int i = 0; i < G[nod].size(); ++i) {
int nod2 = G[nod][i];
if (R[nod2] == 0 || pair_up(R[nod2])) {
L[nod] = nod2; R[nod2] = nod;
return 1;
}
}
return 0;
}
int cuplaj() {
int ok = 1;
while (ok) {
ok = 0;
memset(viz, 0, sizeof(viz));
for (int i = 1; i <= n; ++i) if (L[i] == 0) ok |= pair_up(i);
}
int flux = 0;
for (int i = 1; i <= n; ++i) flux += L[i] > 0;
return flux;
}
void clear() {
n = m = 0; G.clear(); memset(L, 0, sizeof(L)); memset(R, 0, sizeof(R)); memset(viz, 0, sizeof(viz));
}
void adapt();
}
namespace in {
int N, M, E;
int EE[100001][2];
}
using namespace in;
int main() {
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
scanf("%d %d %d", &N, &M, &E);
for (int i = 1; i <= E; ++i) scanf("%d %d", &EE[i][0], &EE[i][1]);
cup::adapt();
return 0;
}
void cup::adapt() {
n = in::N; m = in::M;
G.resize(n + 1);
for (int i = 1; i <= E; ++i) G[EE[i][0]].push_back(EE[i][1]);
printf("%d\n", cuplaj());
for (int i = 1; i <= n; ++i) if (L[i]) printf("%d %d\n", i, L[i]);
}