Cod sursa(job #2563591)

Utilizator DanutAldeaDanut Aldea DanutAldea Data 1 martie 2020 12:44:57
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <vector>
#include <bitset>
#define dim 10010
using namespace std;

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

int n,m,i,j,k,L[dim],R[dim],cnt;
vector <int> l[dim];
bitset <dim> f;
bool ok;

bool cupl(int nod){
    if(f[nod])
        return 0;
    f[nod]=1;

    for(int i=0;i<l[nod].size();i++){
        int vec=l[nod][i];

        if(R[vec]==0){
            cnt++;
            R[vec]=nod;
            L[nod]=vec;
            return 1;
        }
    }

    for(int i=0;i<l[nod].size();i++){
        int vec=l[nod][i];

        if(cupl(R[vec])){
            R[vec]=nod;
            L[nod]=vec;
            return 1;
        }
    }

    return 0;
}

int main(){
    fin>>n>>m>>k;

    for(;k;k--){
        fin>>i>>j;
        l[i].push_back(j);
    }

    do{

        ok=0;
        f.reset();
        for(i=1;i<=n;i++)
            if(!L[i])
                if(cupl(i))
                    ok=1;

    }while(ok);

    fout<<cnt<<"\n";
    for(i=1;i<=n;i++)
        if(L[i])
            fout<<i<<" "<<L[i]<<"\n";

    return 0;
}