Pagini recente » Cod sursa (job #1000515) | Cod sursa (job #2754187) | Cod sursa (job #662416) | Cod sursa (job #1414046) | Cod sursa (job #1389612)
#include <fstream>
//#include<iostream>
#include <queue>
#define NMAX 1001
using namespace std;
ifstream f("flux.in");
ofstream g("flux.out");
const int inf=2000000;
int n, m, i, j, k, T[NMAX], C[NMAX][NMAX], F[NMAX][NMAX], s, d, flux;
int BF(int s, int d)
{ int i, nod;
queue<int> Q;
for (i=1; i<=n; ++i)
T[i]=0;
Q.push(s);
T[s]=-1;
while (!Q.empty())
{ nod=Q.front();
Q.pop();
for (i=2; i<=n; ++i)
if (!T[i] && C[nod][i]>F[nod][i])
{ Q.push(i);
T[i]=nod;
// cout<<i<<" ";
if (i==d)return 1;
}
}
return 0;
}
void Flux_max()
{ int i, r;
for (flux=0; BF(1, n); flux+=r)
{ r=inf;
i=d;
// cout<<"** ";
// cout<<i<<" %%%";
while (i!=s)
{ r=min(r, C[T[i]][i]-F[T[i]][i]);
// cout<<i<<" ";
i=T[i];
}
// cout<<"##\n";
i=d;
// cout<<r<<"\n";
while (i!=s)
{ F[T[i]][i]+=r;
F[i][T[i]]-=r;
i=T[i];
}
// cout<<r<<"\n";
}
}
int main()
{ f>>n>>m;
s=1;
d=n;
for (; m; --m)
{ f>>i>>j>>k;
C[i][j]=k;
}
Flux_max();
g<<flux<<'\n';
return 0;
}