Cod sursa(job #2061143)

Utilizator MihaelaCismaruMihaela Cismaru MihaelaCismaru Data 8 noiembrie 2017 22:32:31
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include<fstream>
#include<vector>
using namespace std;
const int dim = 1e5 + 5;
ifstream in ("cuplaj.in");
ofstream out ("cuplaj.out");
int dreapta[dim],stanga[dim],st,dr,m,a,b;
bool marked[dim],ok;
vector<int>v[dim];
bool dfs (int knot) {
    int vecin;
    if (marked[knot])
        return false;
    marked[knot] = true;
    for (int i = false; i < v[knot].size(); i ++) {
        vecin = v[knot][i];
        if (dreapta[vecin] == false) {
            stanga[knot] = vecin;
            dreapta[vecin] = knot;
            return true;
        }
    }
    for (int i = false; i < v[knot].size(); i ++) {
        vecin = v[knot][i];
        if (dfs (dreapta[vecin])) {
            stanga[knot] = vecin;
            dreapta[vecin] = knot;
            return true;
        }
    }
    return false;
}
int main (void) {
    in >> st >> dr >> m;
    for (int i = true; i <= m; i ++) {
        in >> a >> b;
        v[a].push_back (b);
    }
    ok = true;
    while (ok) {
        for (int i = true; i <= st; i ++) {
            marked[i] = false;
        }
        ok = false;
        for (int i = true; i <= st; i ++) {
            if (!stanga[i]  && dfs(i)){
                ok = true;
            }
        }
    }
    for (int i = true; i <= st; i ++) {
        if (stanga[i] != false) {
            out << i <<" "<< stanga[i] <<"\n";
        }
    }
    return false;
}