Pagini recente » Cod sursa (job #1734812) | Cod sursa (job #2035771) | Cod sursa (job #2454329) | Cod sursa (job #1952552) | Cod sursa (job #866648)
Cod sursa(job #866648)
#include<stdio.h> // date de intrare: nodul de final ( nodul de inceput este 1 )
#include<vector> // muchii, noduri & config grafului
#include<queue>
#include<math.h>
using namespace std;
FILE*in=fopen("date.in","r");
FILE*out=fopen("date.out","w");
int muchii,noduri,tata[1000],final,capacitate[1000][1000];
int minim=9999,flux_final=0;
int backup(int nod);
queue <int> coada;
bool parcurge();
vector<int> a[1000];
int main()
{
fscanf(in,"%d",&final);
fscanf(in,"%d%d",&muchii,&noduri);
for(int i=0;i<muchii;++i)
{
int nody,nodz,cost;
fscanf(in,"%d%d%d",&nody,&nodz,&cost);
a[nody].push_back(nodz);
capacitate[nody][nodz]=cost;
}
while(parcurge())
{
backup(final);
flux_final+=minim;
minim=9999;
}
fprintf(out,"%d",flux_final);
}
bool parcurge()
{
//bool vizitat[1000];
while(!coada.empty())
coada.pop();
for(int i=1;i<=noduri;++i)
tata[i]=0;
coada.push(1);
while(!coada.empty())
{
int curent=coada.front();
coada.pop();
for(int i=0;i<(int)a[curent].size();++i)
{
if(!tata[a[curent][i]])
if(capacitate[curent][a[curent][i]]) // mai ai loc pe acolo
{
tata[a[curent][i]]=curent;
coada.push(a[curent][i]);
}
}
}
if(tata[final])
return true;
else
return false;
}
int backup(int nod)
{
if(nod!=1)
{
minim=min(minim,capacitate[tata[nod]][nod]);
backup(tata[nod]);
capacitate[tata[nod]][nod]-=minim;
}
return minim;
}