Cod sursa(job #1429627)

Utilizator Miruna_DMiruna Miruna_D Data 6 mai 2015 19:50:50
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include<fstream>
#include <vector>
#define Nmax 10001
using namespace std;
  ifstream fin("cuplaj.in");
  ofstream fout("cuplaj.out");

int cuplaj,n,m,e;
vector <int> G[Nmax];
int R[Nmax],L[Nmax],use[Nmax];
  bool Pair_up(int nod)
  {
      if(use[nod]==1) return 0;
      use[nod]=1;
      for(unsigned int i=0;i<G[nod].size();i++)
      {
          int vecin=G[nod][i];
          if(R[vecin]==0)
            {
                R[vecin]=nod;
                L[nod]=vecin;
                return 1;
            }
      }

      for(unsigned int i=0;i<G[nod].size();i++)
      {
          int vecin=G[nod][i];
          if(Pair_up(R[vecin])==1)
          {
              R[vecin]=nod;
              L[nod]=vecin;
              return 1;

          }
      }

      return 0;

  }


  void Solve()
  {

  for(int i=1;i<=n;i++)
    if(!L[i])
  {
      for(int j=1;j<=n;j++)use[j]=0;
      cuplaj+=Pair_up(i);
  }

  }

void Afisare()
{
    fout<<cuplaj<<"\n";
    for(int i=1;i<=n;i++)
        if(L[i])
        fout<<i<<" "<<L[i]<<'\n';
}
  int main()
{
    fin>>n>>m>>e;
    int i,x,y;
    for(i=1;i<=e;i++)
    {
        fin>>x>>y;
        G[x].push_back(y);

    }

    Solve();
    Afisare();
    return 0;
}