Cod sursa(job #1644374)

Utilizator ris99Istrate Ruxandra ris99 Data 9 martie 2016 22:46:31
Problema Cuplaj maxim in graf bipartit Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("cuplaj.in");
ofstream g1("cuplaj.out");
int g[10001][10001],st[10001],dr[10001],nr,n1,n2,x,y,m;
char u[10001];
int cupleaza(int nod)
{ int i;
  if(u[nod]) return 0;
  u[nod]=1;
  for(int i=1;i<=n2;i++)
  { if(!g[nod][i]) continue;
  if(!dr[i]||cupleaza(dr[i]))
  { st[nod]=i;
    dr[i]=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(u,0,sizeof(u));
    if(cupleaza(i)) nr++;

   }

 }

}
void citire ()
{ f>>n1>>n2>>m;
  for(int i=1;i<=m;i++)
  { f>>x>>y;
    g[x][y]=1;
  }

}
int main()
{ citire();
  cuplaj();
  g1<<nr<<endl;
  for(int i=1;i<=n1;i++)
  if(st[i]) g1<<i<<' '<<st[i]<<endl;

    return 0;
}