Cod sursa(job #1418047)

Utilizator azkabancont-vechi azkaban Data 11 aprilie 2015 19:52:27
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>
using namespace std;
int i,j,k,n,m,e,a,b;
int lmatch[10013];
int rmatch[10013];
bool   viz[10013];
vector <int> G[10013];
 
int Hopckroft(int nod)
{
 if (viz[nod]) return 0;
 viz[nod]=1;
 vector <int>::iterator it;
 for (it=G[nod].begin();it!=G[nod].end();++it)
      if (!rmatch[*it] || Hopckroft(rmatch[*it]))
              {
              rmatch[*it]=nod;
              lmatch[nod]=*it;
              return 1;
              } 
 return 0;  
}
 
int main (void)
{
 ifstream cin("cuplaj.in");
 ofstream cout("cuplaj.out");
 cin>>n>>m>>e;
 while(e--)
   {
    cin>>a>>b;
    G[a].push_back(b);
   }
 int cuplare(1);
 while(cuplare)
      {
       cuplare=0;
       memset(viz,0,sizeof viz);
       for (i=1;i<=n;++i)
         if (!lmatch[i])
           cuplare+=Hopckroft(i);
      }
 int sol(0);
 for (i=1;i<=n;++i)
   if (lmatch[i]) ++sol;
 cout<<sol<<"\n";
 for (i=1;i<=n;++i)
   if (lmatch[i])
     cout<<i<<" "<<lmatch[i]<<"\n";
 return 0;
}