Cod sursa(job #697282)

Utilizator bacilaBacila Emilian bacila Data 29 februarie 2012 00:05:55
Problema Cuplaj maxim in graf bipartit Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <vector>
#include <fstream>
#define pb(x) push_back(x)
using namespace std;
vector<int> v[10002];
bool viz[10002];
int rez[10002],sol[10002],n,m,k,x,y,ok;
bool cup(int nod)
{viz[nod]=true;
     for(int i=0;i<v[nod].size();i++)
     if(!rez[v[nod][i]]||(!viz[rez[v[nod][i]]]&&cup(rez[v[nod][i]]))) 
     {rez[v[nod][i]]=nod; sol[nod]=v[nod][i];return true;}
return false;}
int main ()
{int i;
 ifstream f("cuplaj.in");
 ofstream g("cuplaj.out");
f>>n>>m>>k;
while(k)
{f>>x>>y;
v[x].pb(y);
k--;}
ok=1;
while(ok)
{ok=0;
for(i=1;i<=n;i++)
if(!viz[i]&&!sol[i])
if(cup(i)) ok++;
for(i=1;i<=n;i++)
viz[i]=false;
}
for(i=1;i<=n;i++)
if(sol[i]) ok++;
g<<ok<<'\n';
for(i=1;i<=n;i++)
if(sol[i])
g<<i<<" "<<sol[i]<<'\n';
f.close(); g.close();
return 0;
}