Cod sursa(job #930765)

Utilizator Bogdan13Bogdan Stoian Bogdan13 Data 27 martie 2013 20:06:18
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 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);
    }

    for (int i=1;i<=N;i++)
    if (!st[i])
    {
        if (cupleaza(i) ) nr++;
        else
        {
            memset(U,0,sizeof(U));
            if (cupleaza(i) ) nr++;
        }
    }
    g<<nr<<'\n';
    for (int i=1;i<=N;i++)
        if (st[i]) g<<i<<" "<<st[i]<<'\n';

return 0;
}