Cod sursa(job #3268949)

Utilizator darian4444Verniceanu Darian darian4444 Data 18 ianuarie 2025 09:50:11
Problema Cuplaj maxim in graf bipartit Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");

int N,M,E,i,j,a,b,ans;
vector<int> A[100005];
vector<int> match; /// match[L] - R
vector<bool> viz;

bool try_kuhn(int k){
    if (viz[k])
        return false;
    viz[k] = 1;

    for (auto next_k : A[k]){
        if (match[next_k] == -1 || try_kuhn(match[next_k])){
            if (match[next_k] == -1)
                ans++;
            match[next_k] = k;
            return true;
        }
    }
    return false;
}

int main()
{
    fin >> N >> M >> E;

    for (i = 1;i <= E;i++){
        fin >> a >> b;
        A[a].push_back(b);
    }

    match.assign(M, -1);
    for (i = 1;i <= N;i++){
        viz.assign(N, false);
        try_kuhn(i);
    }
    fout << ans << "\n";
    for (i = 1;i <= M;i++){
        if (match[i] != -1)
            fout << match[i] << " " << i << "\n";
    }

    return 0;
}