Cod sursa(job #2279928)

Utilizator alexsandulescuSandulescu Alexandru alexsandulescu Data 10 noiembrie 2018 10:27:28
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("cuplaj.in");
ofstream g("cuplaj.out");

int N, M, nr, E, u, v, L[10003], R[10003], sel[10003];
vector<int> G[10003];
bool cuplaj(int nod)
{
    sel[nod] = true;
    for(auto it : G[nod])
        if(!R[it])
        {
            L[nod] = it;
            R[it] = nod;
            return 1;
        }

    for(auto it : G[nod])
        if(!sel[R[it]] && cuplaj(R[it]))
        {
            L[nod] = it;
            R[it] = nod;
            return 1;
        }
    return 0;
}
int main()
{
    f >> N >> M >> E;
    for(int i = 1; i <= E; i++)
    {
        f >> u >> v;
        G[u].push_back(v);
    }
    bool can = true;
    while(can)
    {
        can = false;
        for(int i = 1; i <= N; i++)
            sel[i] = false;
        for(int i = 1; i <= N; i++)
            if(!L[i] && !sel[i])
                can |= cuplaj(i);
    }
    for(int i = 1; i <= N; i++) {
        if(L[i])
            nr++;
    }
    g << nr << "\n";
    for(int i = 1; i <= N; i++) {
        if(L[i])
            g << i << " " << L[i] << "\n";
    }
    return 0;
}