Cod sursa(job #2688896)

Utilizator mihai_radulescuMihai Radulescu mihai_radulescu Data 20 decembrie 2020 13:48:28
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("cuplaj.in");
ofstream out("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;
            return 1;
        }
    }
    return 0;
}

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

int main()
{
    in >> n >> m >> q;

    for (i=1;i<=q;i++)
    {
        in >> 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;
    }

    out << af << "\n";

    for (i=1;i<=n;i++)
        if (lg[i]!=0)
            out << i << " " << lg[i] << "\n";
}