Cod sursa(job #3337222)

Utilizator ioan19Buzdugan Ioan-Michael ioan19 Data 27 ianuarie 2026 02:25:55
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;
ifstream f("cuplaj.in");
ofstream h("cuplaj.out");

const int NMAX = 10005;
int N, M, E;
vector<int> g[NMAX];
int mt[NMAX], vis[NMAX], timer;

bool try_kuhn(int v) {
    if (vis[v] == timer)
        return false;
    vis[v] = timer;
    for (int to : g[v]) {
        if (mt[to] == 0 || try_kuhn(mt[to])) {
            mt[to] = v;
            return true;
        }
    }
    return false;
}

int main() {
    if (!(f >> N >> M >> E)) return 0;
    for(int i = 1; i <= E; i++){
        int x, y;
        f >> x >> y;
        g[x].push_back(y);
    }

    vector<bool> used1(N + 1, false);
    for (int i = 1; i <= N; i++) {
        for (int to : g[i]) {
            if (mt[to] == 0) {
                mt[to] = i;
                used1[i] = true;
                break;
            }
        }
    }

    for (int i = 1; i <= N; i++) {
        if (!used1[i]) {
            timer++;
            try_kuhn(i);
        }
    }

    int sol = 0;
    for (int i = 1; i <= M; ++i)
        if (mt[i] != 0)
            sol++;

    h << sol << "\n";
    for (int i = 1; i <= M; ++i)
        if (mt[i] != 0)
            h << mt[i] << " " << i << "\n";

    return 0;
}