Pagini recente » Cod sursa (job #1789895) | Monitorul de evaluare | Rating Barbu Ilie Bogdan (Love4Boobies) | Cod sursa (job #921363) | Cod sursa (job #2129104)
#include <cstdio>
#include <vector>
#include <iostream>
#define INF 2000000000
using namespace std;
vector <int> v[1001];
int c[1001][1001],fl[1001][1001],f[1001],tt[1001],vf[1001],n,ok,d[1001];
int bfs (int s){
int i,p,u,nod,vecin;
for (i=1;i<=n;i++)
f[i]=0;
ok=0;
p=u=1;
d[p]=s;
f[s]=1;
while (p<=u){
nod=d[p];
for (i=0;i<v[nod].size();i++){
vecin=v[nod][i];
if (f[vecin]==0 && fl[nod][vecin]<c[nod][vecin]){
f[vecin]=1;
d[++u]=vecin;
tt[vecin]=nod;
}
if (vecin==n && fl[nod][vecin]<c[nod][vecin])
vf[++ok]=nod;
}
p++;
}
return f[n];
}
int main()
{
FILE *fin=fopen ("maxflow.in","r");
FILE *fout=fopen ("maxflow.out","w");
int m,i,x,y,z,nod,vecin,mini,sol=0;
fscanf (fin,"%d%d",&n,&m);
for (i=1;i<=m;i++){
fscanf (fin,"%d%d%d",&x,&y,&z);
c[x][y]=z;
v[x].push_back(y);
v[y].push_back(x);
}
while (bfs (1)){
for (i=1;i<=ok;i++){
nod=vf[i]; // nod sunt vecinii destinatiei in care am ajuns
vecin=n;
mini=INF;
while (nod!=0){
mini=min(mini,c[nod][vecin]-fl[nod][vecin]);
vecin=nod;
nod=tt[nod];
}
nod=vf[i];
vecin=n;
while (nod!=0){
fl[nod][vecin]+=mini;
fl[vecin][nod]-=mini;
vecin=nod;
nod=tt[nod];
}
}
}
for (i=0;i<v[1].size();i++){
vecin=v[1][i];
sol+=fl[1][vecin];
}
fprintf (fout,"%d",sol);
return 0;
}