Pagini recente » Cod sursa (job #2363193) | Cod sursa (job #1400086) | Cod sursa (job #1412507) | Cod sursa (job #2705787) | Cod sursa (job #3195163)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
#define limn 10010
int N, M, E, A[limn], B[limn];
vector<int> G[limn];
bool viz[limn];
bool pairUp(int nod) {
if (viz[nod])
return false;
viz[nod] = true;
for (auto it : G[nod]) // nod din A
if(!B[it]) {
B[it] = nod;
A[nod] = it;
return true;
}
for (auto it : G[nod]) {
if (pairUp(B[it])) { // putem strica perechea de la B[it], asa ca combinam nod cu it
B[it] = nod;
A[nod] = it;
return true;
}
}
return false;
}
int main() {
int x, y;
in >> N >> M >> E;
for (int i = 0; i < E; i++)
{
in >> x >> y;
G[x].push_back(y);
}
bool path_found = true;
while(path_found) {
path_found = false;
for (int i = 1; i <= N; i++)
viz[i] = false;
for (int i = 1; i <= N; i++)
if(!A[i])
path_found |= pairUp(i);
}
int nrMatches = 0;
for (int i = 1; i <= N; i++)
{
if (A[i])
nrMatches++;
}
out << nrMatches << '\n';
for (int i = 1; i <= N; i++)
{
if (A[i])
out << i << ' ' << A[i] << '\n';
}
}