Cod sursa(job #1389594)

Utilizator mateidanutDanut Gabriel Matei mateidanut Data 16 martie 2015 14:03:31
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <vector>
#define NMAX 10001
using namespace std;

ifstream f("cuplaj.in");
ofstream g("cuplaj.out");

vector<int> G[NMAX];
int n1, n2, m, i, j, nr, U[NMAX], st[NMAX], dr[NMAX];

int Cupleaza(int nod)
{   if (U[nod])
        return 0;
    U[nod]=1;
    int k;
    for (k=0; k<G[nod].size(); ++k)
        if (!st[G[nod][k]] || Cupleaza(st[G[nod][k]]))
        {   st[G[nod][k]]=nod;
            dr[nod]=G[nod][k];
            return 1;
        }
    return 0;
}

int main()
{   f>>n1>>n2>>m;
    for (; m; --m)
    {   f>>i>>j;
        G[i].push_back(j);
    }
    for (i=1; i<=n1; ++i)
        if (!dr[i])
        {   if (Cupleaza(i))
                ++nr;
            else
            {   for (j=1; j<=n1; ++j)
                    U[j]=0;
                if (Cupleaza(i))
                    ++nr;
            }
        }
    g<<nr<<'\n';
    for (i=1; i<=n1; ++i)
        if (dr[i])
            g<<i<<' '<<dr[i]<<'\n';
    return 0;
}