Cod sursa(job #3269028)

Utilizator darian4444Verniceanu Darian darian4444 Data 18 ianuarie 2025 10:24:53
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 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,rmatch; /// match[L] - R
vector<bool> viz;
bool change;

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])){
            match[next_k] = k;
            rmatch[k] = next_k;
            change = 1;
            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, -1);
    rmatch.assign(N+1, -1);
    change = 1;
    while (change){
        change = 0;
        viz.assign(N,0);
        for (i = 1;i <= N;i++)
            if (rmatch[i] == -1)
                try_kuhn(i);
    }
    for (i = 1;i <= M;i++){
        if (match[i] != -1)ans++;
    }
    fout << ans << "\n";
    for (i = 1;i <= M;i++){
        if (match[i] != -1)
            fout << match[i] << " " << i << "\n";

    }

    return 0;
}