Cod sursa(job #901025)

Utilizator hiticas_abelhiticasabel hiticas_abel Data 28 februarie 2013 23:40:44
Problema Cuplaj maxim in graf bipartit Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <vector>
#include <string.h>
using namespace std;
int N1,N2,st[1000],dr[1000],nr,M,viz[1000];
vector <int > G[1000];
int cupleaza(int nod)
{
        int i,vecini;
      if (viz[nod]) return 0;
      viz[nod]=1;
      vecini=G[nod].size();
      for(i=0;i<vecini;i++)
      {
             if(!G[nod][i]) continue;
             if (!dr[i+1]||cupleaza(dr[i+1]))
             {st[nod]=i+1;
              dr[i+1]=nod;
              return 1;
             }
      }
      return 0;
}

void cuplaj()
{
       int i;
       for(i=1;i<=N1;i++)
       {
             if (st[i]) continue;
             if(cupleaza(i)) nr++;
             else
             {
                   memset(viz,0,sizeof(viz));
                   if (cupleaza(i)) nr++;
             }
       }
}

int main()
{int x,y,E,i;
      ifstream f("cuplaj.in");
      f>>N1>>N2>>E;
      for(i=1;i<=E;i++)
      {
            f>>x>>y;
            G[x].push_back(y);
            G[y].push_back(x);
      }
      f.close();
      cuplaj();
      ofstream g("cuplaj.out");


g<<nr<<"\n";
      for(i=1;i<=nr;i++)

             g<<st[i]<<" "<<dr[i]<<"\n";
      g.close();
      return 0;
}