Pagini recente » Cod sursa (job #1279448) | Cod sursa (job #3242606) | Cod sursa (job #2951884) | Cod sursa (job #35846) | Cod sursa (job #2695983)
#include <bits/stdc++.h>
#define NMAX 10002
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int N, M, E;
vector <int> g[NMAX + 2];
bool d[NMAX + 2];
int l[NMAX + 2], r[NMAX + 2];
int matches;
bool PairUp(int node){
if(d[node])
return false;
d[node] = true;
for(auto it : g[node])
if(!r[it]) {
++matches;
l[node] = it;
r[it] = node;
return true;
}
for(auto it : g[node])
if(PairUp(r[it])) {
l[node] = it;
r[it] = node;
return true;
}
return false;
}
void Solve() {
bool ok;
do {
ok = false;
for(int i = 1; i <= N; i++)
d[i] = false;
for(int i = 1; i <= N; i++)
if(!l[i])
ok |= PairUp(i);
}
while(ok);
}
int main() {
fin >> N >> M >> E;
for(int i = 1; i <= E; i++) {
int x, y;
fin >> x >> y;
g[x].push_back(y);
}
Solve();
fout << matches << '\n';
for(int i = 1; i <= N; i++)
if(l[i])
fout << i << ' ' << l[i] << '\n';
return 0;
}