Pagini recente » Cod sursa (job #1087376) | Cod sursa (job #2041837) | Cod sursa (job #1386049) | Cod sursa (job #2235808) | Cod sursa (job #2503090)
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
const int Nmax = 10000;
vector <int> g[Nmax + 5];
int n1, n2, m, l[Nmax + 5], r[Nmax + 5];
bool use[Nmax + 5];
void Read(){
fin >> n1 >> n2 >> m;
for (int i = 1; i <= m; i++){
int x, y;
fin >> x >> y;
g[x].push_back(y);
}
}
int Pairup(int nod){
if (use[nod])
return 0;
use[nod] = 1;
for (auto i : g[nod])
if (!r[i]){
r[i] = nod;
l[nod] = i;
return 1;
}
for (auto i : g[nod])
if (Pairup(r[i])){
r[i] = nod;
l[nod] = i;
return 1;
}
return 0;
}
void Solve(){
bool ok = 0;
do{
ok = 0;
memset(use, 0, sizeof use);
for (int i = 1; i <= n1; i++)
if (!l[i])
ok |= Pairup(i);
}while(ok);
}
void Print(){
int nr = 0;
for (int i = 1; i <= n1; i++)
if (l[i])
nr++;
fout << nr << '\n';
for (int i = 1; i <= n1; i++)
if (l[i])
fout << i << ' ' << l[i] << '\n';
}
int main(){
Read();
Solve();
Print();
return 0;
}