Cod sursa(job #2988812)

Utilizator Edyci123Bicu Codrut Eduard Edyci123 Data 5 martie 2023 15:04:27
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#include <vector>
#include <bitset>

#define DIM 10005

using namespace std;

ifstream f("cuplaj.in");
ofstream g("cuplaj.out");

int n, m, k, cnt;
int L[DIM], R[DIM];
vector<int> edges[DIM];
bitset<DIM> viz;

bool cupleaza(int node) {
    if (viz[node]) {
        return false;
    }
    viz[node] = 1;

    for (auto k: edges[node]) {
        if (!R[k]) {
            R[k] = node;
            L[node] = k;
            viz[node] = 0;
            cnt++;
            return true;
        }
    }

    for (auto k: edges[node]) {
        if (cupleaza(R[k])) {
            R[k] = node;
            L[node] = k;
            viz[node] = 0;
            return true;
        }
    }

    return false;
}

int main() {

    f >> n >> m >> k;

    while (k--) {
        int x, y;
        f >> x >> y;
        edges[x].push_back(y);
    }

    for (int i = 1; i <= n; i++) {
        cupleaza(i);
    }

    g << cnt << "\n";
    for (int i = 1; i <= n; i++) {
        if (L[i]) {
            g << i << " " << L[i] << "\n";
        }
    }


    return 0;
}