Pagini recente » Borderou de evaluare (job #3203920) | Rezultatele filtrării | Cod sursa (job #2860391) | Rezultatele filtrării | Cod sursa (job #2753555)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream be("cuplaj.in");
ofstream ki("cuplaj.out");
void beolvas(vector<vector<int>>& sz_lista, int m);
bool parosit(const vector<vector<int>>& sz_lista, int u, vector<bool>& latogatott, vector<int>& par_l, vector<int>& par_r);
void max_parositas(const vector<vector<int>>& sz_lista, int l, int r);
int main()
{
int l, r, m;
be >> l >> r >> m;
vector<vector<int>> sz_lista(l);
beolvas(sz_lista, m);
max_parositas(sz_lista, l, r);
}
void beolvas(vector<vector<int>>& sz_lista, int m) {
for (int i = 0; i < m; i++) {
int x, y;
be >> x >> y;
sz_lista[x - 1].push_back(y - 1);
}
}
bool parosit(const vector<vector<int>>& sz_lista, int u, vector<bool>& latogatott, vector<int>& par_l, vector<int>& par_r){
if (latogatott[u]) return false;
latogatott[u] = true;
for (int szomsz : sz_lista[u]) {
if (par_r[szomsz] == -1) {
par_r[szomsz] = u;
par_l[u] = szomsz;
return true;
}
}
for (int szomsz : sz_lista[u]) {
if (parosit(sz_lista, par_r[szomsz], latogatott, par_l, par_r)) {
par_r[szomsz] = u;
par_l[u] = szomsz;
return true;
}
}
return false;
}
void max_parositas(const vector<vector<int>>& sz_lista, int l, int r) {
vector<bool> latogatott(l + r, false);
vector<int> par_l(l, -1);
vector<int> par_r(r, -1);
int elek_szama = 0;
for (int i = 0; i < l; i++) {
if (!parosit(sz_lista, i, latogatott, par_l, par_r)) {
for (int i = 0; i < l + r; i++)
latogatott[i] = false;
if (parosit(sz_lista, i, latogatott, par_l, par_r))
elek_szama += 1;
}
else elek_szama += 1;
}
ki << elek_szama << "\n";
for (int i = 0; i < l; i++){
if (par_l[i] != -1) ki << i + 1 << " " << par_l[i] + 1 << "\n";
}
}