Cod sursa(job #1437452)

Utilizator MaarcellKurt Godel Maarcell Data 17 mai 2015 19:25:47
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;

int N,M,E,l[10010],r[10010]; vector<int> graf[10010]; bool v[10010];

bool pairup(int nod){
    if (v[nod]) return 0;
    v[nod]=1;

    int i;
    for (i=0; i<graf[nod].size(); i++)
        if (!r[graf[nod][i]] || pairup(r[graf[nod][i]])){
            l[nod]=graf[nod][i];
            r[graf[nod][i]]=nod;
            return 1;
        }

    return 0;
}

int main(){
    ifstream fin("cuplaj.in");
    ofstream fout("cuplaj.out");
    fin >> N >> M >> E;

    int i,x,y,cnt=0;;
    for (i=1; i<=E; i++){
        fin >> x >> y;
        graf[x].push_back(y);
    }

    bool ok=1;
    while (ok){
        ok=0;
        memset(v,0,sizeof(v));
        for (i=1; i<=N; i++)
            if (!l[i])
                if (pairup(i)){
                    ok=1;
                    cnt++;
                }

    }

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

    return 0;
}