Cod sursa(job #3335817)

Utilizator sergioneUngureanu Sergiu sergione Data 23 ianuarie 2026 17:39:29
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <vector>
#include <cstring>

using namespace std;
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");

const int NMAX = 10005;

vector<int> adj[NMAX];
int match[NMAX];
bool vis[NMAX];

bool dfs(int node) {
    for(const int v : adj[node]) {
        if(vis[v]) continue;

        vis[v] = true;
        if(match[v] == 0 || dfs(match[v])) {
            match[v] = node;
            return true;
        }
    }
    return false;
}

int main() {
    int n, m, k;
    cin >> n >> m >> k;
    for(int i = 0; i < k; i++) {
        int a, b;
        cin >> a >> b;
        adj[a].push_back(b);
    }

    memset(match, 0, sizeof(match));
    int cuplaje = 0;
    for(int i = 1; i <= n; i++) {
        memset(vis, false, sizeof(vis));

        if(dfs(i)) {
            cuplaje++;
        }
    }
    cout << cuplaje << '\n';
    for(int i = 1; i <= m; i++) {
        if(match[i]) {
            cout << match[i] << " " << i << '\n';
        }
    }
    return 0;
}