Pagini recente » Cod sursa (job #2217645) | Cod sursa (job #1246015) | Cod sursa (job #98644) | Cod sursa (job #1364906) | Cod sursa (job #2489305)
#include<fstream>
#include<vector>
#include<cstring>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
const int NMax = 10000;
vector <int> G[NMax+5];
int L[NMax+5], R[NMax+5], N, M, E, Use[NMax+5];
void Read() {
in >> N >> M >> E;
for (int i = 1; i <= E; i++) {
int x, y;
in >> x >> y;
G[x].push_back(y);
}
}
bool Pairup(int Nod) {
if(Use[Nod]) return 0;
Use[Nod] = 1;
for (auto Vecin : G[Nod]) {
if(!R[Vecin]) {
L[Nod] = Vecin;
R[Vecin] = Nod;
return 1;
}
}
for (auto Vecin : G[Nod]) {
if(Pairup(R[Vecin])) {
L[Nod] = Vecin;
R[Vecin] = Nod;
return 1;
}
}
return 0;
}
void Solve() {
bool ok;
do {
ok = 0;memset(Use,0,sizeof(Use));
for (int i = 1; i <= N; i++)
if(!L[i])
ok |= Pairup(i);
}
while(ok);
}
void Print() {
int Sol = 0;
for (int i = 1; i <= N; i++)
if(L[i]) Sol++;
out << Sol << '\n';
for (int i = 1; i <= N; i++)
if(L[i])
out << i << " " << L[i] << '\n';
}
int main() {
Read();
Solve();
Print();
}