Cod sursa(job #2361420)

Utilizator alexkosaAlex Kosa alexkosa Data 2 martie 2019 15:33:26
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>
#include <vector>

using namespace std;

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

int n,m,e,viz[10003],l[10003],r[10003];

vector<int>g[10003];
int cuplaj(int nod)
{
    if(viz[nod])
        return 0;
    viz[nod]=1;
    for(vector<int> :: iterator it=g[nod].begin();it!=g[nod].end();it++)
    {
        if(r[*it]==0)
        {
            l[nod]=*it;
            r[*it]=nod;
            return 1;
        }
        else
        {
            if(cuplaj(r[*it]))
            {
                l[nod]=*it;
            r[*it]=nod;
            return 1;
            }
        }
    }

    return 0;
}

int main()
{
    fin>>n>>m>>e;
    for(int i=1;i<=e;i++)
    {
        int x,y;
        fin>>x>>y;
        g[x].push_back(y);
    }
    int ok=1;
    while(ok)
    {
        ok=0;
        for(int i=1;i<=n;i++)
            viz[i]=0;
        for(int i=1;i<=n;i++)
                if(l[i]==0)
                    if(cuplaj[i])
                        ok=1;
    }
    int sol=0;
    for(int i=1;i<=n;i++)
        if(l[i])
            sol++;
    fout<<sol<<'\n';
    for(int i=1;i<=n;i++)
        if(l[i])
    {
        fout<<i<<" "<<l[i]<<'\n';
    }
}