Cod sursa(job #1389407)

Utilizator mateidanutDanut Gabriel Matei mateidanut Data 16 martie 2015 11:17:04
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#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, U[NMAX], st[NMAX], dr[NMAX], nr;

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

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