Cod sursa(job #963771)

Utilizator Aida_SilviaStrimbeanu Aida Silvia Aida_Silvia Data 19 iunie 2013 15:22:47
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include<vector>
#include<fstream>

#define maxn 10073

using namespace std;

vector <int> graf[maxn];
int n,m,e;

int l[maxn], r[maxn];
bool sel[maxn];

bool cupleaza(int nod)
{   int i;
    if (sel[nod]) return 0;
    sel[nod]=1;
    for (i=0; i<graf[nod].size(); i++)
        if (!r[graf[nod][i]])
        {
            l[nod]=graf[nod][i];
            r[graf[nod][i]]=nod;
            return 1;
        }

    for (i=0; i<graf[nod].size(); i++)
        if (cupleaza(r[graf[nod][i]]) )
        {

            l[nod]=graf[nod][i];
            r[graf[nod][i]]=nod;
            return 1;
        }

        return 0;

    }

void read()
{
    int x,y;
    ifstream in("cuplaj.in");
    in>>n>>m>>e;

    for(int i=1; i<=e; i++)
    {
        in>>x>>y;
        graf[x].push_back(y);
    }
}



int main()
{

    read();

    int cuplaj=0;

    for (int i=1;i<=n;i++)
    {
        if (l[i] == 0)
        {
         fill(sel,sel+n+1,0);
         cuplaj+=cupleaza(i);
        }
    }

    ofstream out("cuplaj.out");

    out<<cuplaj<<"\n";
    for(int i=1;i<=n;i++)
        if (l[i])
            out<<i<<" "<<l[i]<<"\n";
    return 0;
}