Cod sursa(job #2960129)

Utilizator ScoveargaIlie Andrei-Virgil Scovearga Data 3 ianuarie 2023 16:41:06
Problema Cuplaj maxim in graf bipartit Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <vector>
#include <climits>

using namespace std;

vector<int> gf[10001];
bool ok, viz[10001];
int n, m, e, x, y, p[10001], contor;

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

bool pereche(int nod)
{
    viz[nod] = true;
    for(int aux : gf[nod])
    {
        if(p[aux] == 0)
        {
            p[nod] = aux;
            p[aux] = nod;
            return true;
        }
        if(!viz[p[aux]] && pereche(p[aux]))
        {
            p[nod] = aux;
            p[aux] = nod;
            return true;
        }
    }
    return false;
}

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

    for(int i = 0; i < e; ++i)
    {
        f>>x>>y;
        y += n;
        gf[x].push_back(y);
        gf[y].push_back(x);
    }

    do
    {
        ok = false;
        for(int i = 1; i <= n; ++i)
            if(!viz[i] && !p[i] && pereche(i))
            {
                contor++;
                ok = true;
            }
        for(int i = 1; i <= n + m; ++i)
            viz[i] = false;
    } while(ok);

    g<<contor<<"\n";
    for(int i = 1; i <= n; ++i)
        if(p[i])
            g<<i<<' '<<p[i] - n<<"\n";
}