Pagini recente » Cod sursa (job #916427) | Cod sursa (job #2823190) | Cod sursa (job #170973) | Cod sursa (job #1818922) | Cod sursa (job #1393719)
#include<fstream>
#include<vector>
#include<cstring>
using namespace std;
typedef int var;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
#define MAXN 10001
var L[MAXN], R[MAXN];
bool Viz[MAXN];
vector<var> G[MAXN];
var n, m;
bool match(var i) {
if(Viz[i]) return false;
Viz[i] = 1;
for(auto vec : G[i]) {
if(!R[vec]) {
L[i] = vec;
R[vec] = i;
return true;
}
}
for(auto vec : G[i]) {
if(match(R[vec])) {
L[i] = vec;
R[vec] = i;
return true;
}
}
return false;
}
void solve() {
bool ok = 1;
while(ok) {
ok = 0;
memset(Viz, 0, sizeof(Viz));
for(var i=1; i<=n; i++) {
if(!L[i])
ok |= match(i);
}
}
}
int main() {
var e, a, b;
fin>>n>>m>>e;
while(e--) {
fin>>a>>b;
G[a].push_back(b);
}
solve();
var count = 0;
for(var i=1; i<=n; i++) {
if(L[i])
count ++;
}
fout<<count<<'\n';
for(var i=1; i<=n; i++) {
if(L[i]) {
fout<<i<<" "<<L[i]<<'\n';
}
}
return 0;
}