Cod sursa(job #2419232)

Utilizator Raresr14Rosca Rares Raresr14 Data 7 mai 2019 20:48:56
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n,m,k,x,y,sol,L[10010],R[10010],ok;
vector<int> A[10010];
bitset<10010> f;
int cuplaj(int nod){
    if(f[nod])
        return 0;
    f[nod]=1;
    for(int i=0;i<A[nod].size();i++){
        int c=A[nod][i];
        if(R[c]==0){
            L[nod]=c;
            R[c]=nod;
            sol++;
            return 1;
        }
    }
    for(int i=0;i<A[nod].size();i++){
        int c=A[nod][i];
        if(cuplaj(R[c])){
            L[nod]=c;
            R[c]=nod;
            return 1;
        }
    }
    return 0;
}
int main(){
    fin>>n>>m>>k;
    for(int i=1;i<=k;i++){
        fin>>x>>y;
        A[x].push_back(y);
    }
    do{
        ok=0;
        f.reset();
        for(int i=1;i<=n;i++)
            if(L[i]==0)
                ok|=cuplaj(i);

    }while(ok==1);
    fout<<sol<<"\n";
    for(int i=1;i<=n;i++)
        if(L[i])
            fout<<i<<" "<<L[i]<<"\n";
    return 0;
}