Cod sursa(job #1416523)

Utilizator tudi98Cozma Tudor tudi98 Data 8 aprilie 2015 12:19:07
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
#define dim 10005

int N,M,E;
vector<int> v[dim];
int L[dim],R[dim];
int Cuplaj = 0;
bool seen[dim];

bool Cuplat(int x)
{
    if(seen[x])
        return 0;
    seen[x] = 1;

    for(int i = 0; i < v[x].size(); i++){
        if(!R[v[x][i]] || Cuplat(R[v[x][i]])){
            L[x] = v[x][i];
            R[v[x][i]] = x;
            return 1;
        }
    }

    return 0;

}

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

    fin >> N >> M >> E;

    for(int i = 1; i <= E; i++){
        int x,y;
        fin >> x >> y;
        v[x].push_back(y);
    }

    bool Better = 1;

    while(Better)
    {
        Better = 0;
        memset(seen,0,sizeof seen);

        for(int i = 1; i <= N; i++)
            if(!L[i] && Cuplat(i)){
                ++Cuplaj;
                Better = 1;
            }
    }

    fout << Cuplaj << "\n";
    for(int i = 1; i <= N; i++)
        if(L[i])
            fout << i << " " << L[i] << "\n";

}