Cod sursa(job #3336717)

Utilizator biancalautaruBianca Lautaru biancalautaru Data 25 ianuarie 2026 15:22:11
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <cstring>
#include <vector>
#define DIM 10001
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n, m, k, x, y, cnt, st[DIM], dr[DIM];
bool viz[DIM];
vector<int> l[DIM];

bool dfs(int nod) {
    if (viz[nod])
        return false;
    viz[nod] = 1;
    for (auto vec : l[nod])
        if (dr[vec] == 0 || dfs(dr[vec])) {
            st[nod] = vec;
            dr[vec] = nod;
            return true;
        }
    return false;
}

int main() {
    fin >> n >> m >> k;
    while (k--) {
        fin >> x >> y;
        l[x].push_back(y);
    }
    for (int i = 1; i <= n; i++) {
        memset(viz, false, sizeof(viz));
        if (dfs(i))
            cnt++;
    }
    fout << cnt << "\n";
    for (int i = 1; i <= n; i++)
        if (st[i] != 0)
            fout << i << " " << st[i] << "\n";
    return 0;
}