Cod sursa(job #2541729)

Utilizator MariusblockMoga Marius-Ioan Mariusblock Data 8 februarie 2020 19:57:27
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <bits/stdc++.h>

using namespace std;

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

vector<int> G[20000];
int use[20000];
int R[20000];
int L[20000];
int n,m,e,nr;

int pairup(int nod){
    if(use[nod] == nr){
        return 0;
    }
    use[nod] = nr;
    for(auto vecin: G[nod]){
        if(R[vecin] == 0){
            R[vecin] = nod;
            L[nod] = vecin;
            return 1;
        }
    }
    for(auto vecin: G[nod]){
        if(pairup(R[vecin])){
            R[vecin] = nod;
            L[nod] = vecin;
            return 1;
        }
    }
    return 0;
}

int main()
{
    int i,a,b,S = 0;
    fin>>n>>m>>e;
    for(i = 1; i <= e; i++){
        fin>>a>>b;
        G[a].push_back(b);
    }
    for(i = 1; i <= n ; i++){
        nr = i;
        S += pairup(i);

    }
    fout<<S<<endl;
    for(i = 1; i <= n; i++){
        if(L[i] != 0){
            fout<<i<<" "<<L[i]<<'\n';
        }
    }
    return 0;
}