Cod sursa(job #2666666)

Utilizator BogauuuBogdan Ivancu Bogauuu Data 2 noiembrie 2020 12:20:02
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");

bool v[10005],ok;
int r[10005],lg[10005],af;

vector <int>l[10005];

bool cuplaj(int i)
{
    if (v[i]==1) return 0;
    v[i]=1;
    for (int j=0;j<l[i].size();j++)
    {
        int vec=l[i][j];
        if (r[vec]==0)
        {
            r[vec]=i;
            lg[i]=vec;
            af++;
            return 1;
        }
    }
    for (int j=0;j<l[i].size();j++)
    {
        int vec=l[i][j];
        if (cuplaj(r[vec])==1)
        {
            r[vec]=i;
            lg[i]=vec;
            //af++;
            return 1;
        }
    }
    return 0;
}

int i,n,m,q,x,y;

int main()
{
    fin >> n >> m >> q;
    for (i=1;i<=q;i++)
    {
        fin >> x >> y;
        l[x].push_back(y);
    }
    while (ok==0)
    {
        ok=1;
        for (i=1;i<=n;i++) v[i]=0;
        for (i=1;i<=n;i++) if (lg[i]==0 && cuplaj(i)==1) ok=0;
    }
    //for (i=1;i<=n;i++) if (lg[i]==0) af--;
    fout << af << "\n";
    for (i=1;i<=n;i++) if (lg[i]!=0) fout << i << " " << lg[i] << "\n";

    return 0;
}