Pagini recente » Cod sursa (job #2515598) | Cod sursa (job #2658357) | Cod sursa (job #3183715) | Cod sursa (job #2475275) | Cod sursa (job #3195161)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
const int MAXN = 10000;
int N, M, E;
int A[MAXN + 1], B[MAXN + 1];
vector<int> AtoB[MAXN + 1];
bool viz[MAXN + 1];
bool pair_up(int nod)
{
if(viz[nod])
return false;
viz[nod] = true;
for(const auto& i : AtoB[nod])
if(!B[i])
{
A[nod] = i;
B[i] = nod;
return true;
}
for(const auto& i : AtoB[nod])
if(pair_up(B[i])) {
A[nod] = i;
B[i] = nod;
return true;
}
return false;
}
int main()
{
fin >> N >> M >> E;
int a, b;
while(E--) {
fin >> a >> b;
AtoB[a].push_back(b);
}
bool path_found = true;
while(path_found) {
path_found = false;
// memset(viz, 0, sizeof viz);
for(int i = 1; i <= N; ++i)
viz[i] = 0;
for(int i = 1; i <= N; ++i)
if(!A[i])
path_found |= pair_up(i);
}
int nrp = 0;
for(int i = 1; i <= N; ++i)
if(A[i]) ++nrp;
fout << nrp << '\n';
for(int i = 1; i <= N; ++i)
if(A[i])
fout << i << ' ' << A[i] << '\n';
return 0;
}