Mai intai trebuie sa te autentifici.

Cod sursa(job #2510125)

Utilizator DanutAldeaDanut Aldea DanutAldea Data 15 decembrie 2019 20:38:52
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <vector>
#include <bitset>
#define dim 10001
using namespace std;

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

int n,m,i,j,e,l[dim],r[dim],sol;
vector <int> v[dim];
bitset <dim> f;

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

    int x;
    for(int i=0;i<v[nod].size();i++){
        x=v[nod][i];
        if(r[x]==0){
            r[x]=nod;
            l[nod]=x;
            sol++;
            return 1;
        }
    }

    for(int i=0;i<v[nod].size();i++){
        x=v[nod][i];
        if(cupl(r[x])){
            r[x]=nod;
            l[nod]=x;
            return 1;
        }
    }

    return 0;
}

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

    for(;e;e--){
        fin>>i>>j;
        v[i].push_back(j);
    }

    bool ok;
    do{
        f.reset();
        ok=0;

        for(i=1;i<=n;i++)
            if(l[i]==0)
                if(cupl(i))
                    ok=1;
    }while(ok);

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

    return 0;
}