Cod sursa(job #2541440)

Utilizator MariusblockMoga Marius-Ioan Mariusblock Data 8 februarie 2020 13:40:54
Problema Cuplaj maxim in graf bipartit Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 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;

int pairup(int nod){
    cout<<"S"<<use[nod]<<endl;
    if(use[nod]){
        return 0;
    }
    use[nod] = 1;
    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++){

        memset(use,0,sizeof(use));
        S += pairup(i);

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