Cod sursa(job #1154949)

Utilizator ArmandNMArmand Nicolicioiu ArmandNM Data 26 martie 2014 15:20:13
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <vector>
#include <cstring>

const int NMMAX = 10003;

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

int N,M,E,st[NMMAX],dr[NMMAX],x,y,nr;
bool used[NMMAX];
vector <int> v[NMMAX];

int cupleaza(int nod)
{
    if (used[nod])
        return 0;
    used[nod] = true;
    for (int i = 0; i < v[nod].size(); ++i)
    {
        if (!dr[ v[nod][i] ] || cupleaza(dr[ v[nod][i] ]))
        {
            st[nod] = v[nod][i];
            dr[ v[nod][i] ] = nod;
            return 1;
        }
    }
    return 0;
}

int main()
{
    f >> N >> M >> E;
    for (int i = 1; i <= E; ++i)
    {
        f >> x >> y;
        v[x].push_back(y);
    }


    for (int i = 1; i <= N; ++i)
    {
        if (st[i])
            continue;
        memset(used, 0, sizeof(used));
        if (cupleaza(i))
            nr++;
    }

    g << nr << '\n';

    for (int i = 1; i <= N; ++i)
    {
        if (st[i]!=0)
            g << i << " " << st[i] << '\n';
    }

    f.close();
    g.close();
    return 0;
}