Cod sursa(job #2664235)

Utilizator mihnea03Ciocioiu Mihnea mihnea03 Data 28 octombrie 2020 10:45:52
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>
#include <vector>
#include <cstring>
#define dim 10010
using namespace std;
vector<int> a[dim];
int f[dim];
int l[dim];
int r[dim];
int i,n,m,q,k,sol,ok,x,y;

int cuplaj(int nod) {
    if (f[nod]) return 0;
    f[nod]=1;
    for (auto vecin:a[nod]) {
        if (r[vecin]==0) {
            l[nod]=vecin;
            r[vecin]=nod;
            sol++;
            return 1;
        }
    }
    for (auto vecin:a[nod]) {
        if (cuplaj(r[vecin])) {
            l[nod]=vecin;
            r[vecin]=nod;
            return 1;
        }
    }
    return 0;
}

int main() {
    ifstream fin("java.in");
    ofstream fout("java.out");
    for(fin>>q;q--;) {
        fin>>n>>m>>k;
        for (i=1;i<=n;i++) {
            a[i].clear();
        }
        memset(l,0,sizeof(l));
        memset(r,0,sizeof(r));
        for (;k--;) {
            fin>>x>>y;
            a[x].push_back(y);
        }
        ok=1;
        sol=0;
        while (ok) {
            ok=0;
            memset(f,0,sizeof(f));
            for (i=1;i<=n;i++) {
                if (l[i]==0&&cuplaj(i)) {
                    ok=1;
                }
            }
        }
        fout<<sol<<"\n";

    }
    return 0;
}