Cod sursa(job #1235935)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 30 septembrie 2014 22:23:15
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <vector>

using namespace std;

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

int n,m,e,i,L[10010],R[10010],v[10010],cuplaj,x,y,ok;

vector <int> l[10010];

bool cupleaza (int nod) {
    v[nod]=1;
    for (int i=0;i<l[nod].size();i++)
        if (!R[l[nod][i]]){
            L[nod]=l[nod][i];
            R[l[nod][i]]=nod;
            return 1;
        }
    for (int i=0;i<l[nod].size();i++)
        if (!v[R[l[nod][i]]]&&cupleaza(R[l[nod][i]])){
            L[nod]=l[nod][i];
            R[l[nod][i]]=nod;
            return 1;
        }
    return 0;
}


int main () {

    fin>>n>>m>>e;

    while (e--) {
        fin>>x>>y;
        l[x].push_back(y);
    }
    e=max(n,m);
    do {
        ok=0;
        for (i=1;i<=e;i++)
            v[i]=0;
        for (i=1;i<=n;i++)
            if (!L[i]&&cupleaza(i)) {
                cuplaj++;
                ok=1;
            }
    }while (ok);
    fout<<cuplaj<<"\n";
    for (i=1;i<=n;i++)
        if (L[i])
            fout<<i<<" "<<L[i]<<"\n";

    return 0;
}