Cod sursa(job #930772)

Utilizator Bogdan13Bogdan Stoian Bogdan13 Data 27 martie 2013 20:09:33
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<fstream>
#include<vector>
#include<cstring>
#define EMAX 100005
#define NMAX 10005
using namespace std;

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

int N,M,E,U[NMAX],x,y,st[NMAX],dr[NMAX],nr ;
vector<int> L[EMAX];

int cupleaza(int nod)
{
    if (U[nod]) return 0;
    U[nod]=1;

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

int main()
{
    f>>N>>M>>E;

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


    int ok=1;

    while(ok)
    {
    memset(U,0,sizeof(U));
    ok=0;

    for (int i=1;i<=N;i++)
        if (!st[i])
        {if (cupleaza(i) ) {nr++; ok=1;}}

    }

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

return 0;
}