Pagini recente » Borderou de evaluare (job #873485) | Cod sursa (job #2654213) | Cod sursa (job #1967178) | Cod sursa (job #2809127) | Cod sursa (job #1965420)
#include <iostream>
#include <fstream>
#include <queue>
#define NMax 10001
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n, m, e, x, y, c, L[NMax], R[NMax];
vector <int> v[NMax];
bool viz[NMax];
bool PairUp(int nod) {
if(viz[nod])
return false;
viz[nod] = true;
int vSize = v[nod].size();
for(int i = 0; i < vSize; ++i) {
int fiu = v[nod][i];
if(R[fiu] == 0) {
L[nod] = fiu;
R[fiu] = nod;
return true;
} else if(PairUp(R[fiu])) {
L[nod] = fiu;
R[fiu] = nod;
return true;
}
}
return false;
}
void cuplaj() {
bool ok = true;
while(ok) {
for(int i = 1; i <= n; ++i) {
viz[i] = false;
}
ok = false;
for(int i = 1; i <= n; ++i) {
if(L[i] == 0) {
if(PairUp(i)) {
c++;
ok = true;
}
}
}
}
}
int main()
{
fin>>n>>m>>e;
for(int i = 1; i <= e; ++i) {
fin>>x>>y;
v[x].push_back(y);
}
viz[0]=true;
cuplaj();
fout<<c<<'\n';
for(int i = 1; i <=n; ++i) {
if(L[i]) {
fout<<i<<' '<<L[i]<<'\n';
}
}
fin.close();
fout.close();
return 0;
}