Cod sursa(job #2962740)

Utilizator AlexPascu007Pascu Ionut Alexandru AlexPascu007 Data 8 ianuarie 2023 23:56:13
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>
#define DIM 10010
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n,m,e,i,x,y,sol,l[DIM],r[DIM];
bool ok;
bitset<DIM> f;
vector<int> L[DIM];
bool cupleaza(int nod) {
    if (f[nod]==1)
        return false;
    f[nod]=1;
    for (auto vecin:L[nod]) {
        if (r[vecin]==0) {
            l[nod]=vecin;
            r[vecin]=nod;
            sol++;
            return true;
        }
    }
    for (auto vecin:L[nod]) {
        if (cupleaza(r[vecin])) {
            l[nod]=vecin;
            r[vecin]=nod;
            return true;
        }
    }
    return false;
}
int main() {
    fin>>n>>m>>e;
    for (i=1;i<=e;i++) {
        fin>>x>>y;
        L[x].push_back(y);
    }
    do {
        ok=0;
        f.reset();
        for (i=1;i<=n;i++)
            if (l[i]==0)
                ok|=cupleaza(i);
    } while (ok==1);
    fout<<sol<<"\n";
    for (i=1;i<=n;i++)
        if (l[i])
            fout<<i<<" "<<l[i]<<"\n";
    return 0;
}