Pagini recente » Cod sursa (job #866812) | Cod sursa (job #2071019) | Cod sursa (job #230521) | Cod sursa (job #2180591) | Cod sursa (job #2049634)
#include<bits/stdc++.h>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
vector<int> v[1001];
deque<int> Q;
int n,m,FL,T[1001],cap[1001][1001],flux[1001][1001],BF();
void read(),solve(),UPD();
int main()
{
int X,Y,Z;
f>>n>>m;
for(; m; m--)
{
f>>X>>Y>>Z;
v[X].push_back(Y);
v[Y].push_back(X);
cap[X][Y]=Z;
}
while(BF())UPD();
g<<FL;
return 0;
}
int BF()
{
int nod,i;
for(i=2; i<=n; i++)T[i]=0;
T[1]=-1;
Q.resize(0);
Q.push_back(1);
for(; Q.size();Q.pop_front())
{
nod=Q.front();
for(auto vec:v[nod])
if(!T[vec])
{
if(T[vec])continue;
if(cap[nod][vec]<=flux[nod][vec])continue;
T[vec]=nod;
Q.push_back(vec);
}
}
return 0;
}
void UPD()
{
int j,FC;
for(auto i:v[n])
if(T[i]&&cap[i][n]>flux[i][n])
{
FC=cap[i][n]-flux[i][n];
for(j=i; j!=1; j=T[j])
FC=min(FC,cap[T[j]][j]-flux[T[j]][j]);
if(FC)
{
FL+=FC;
flux[i][n]+=FC;
flux[n][i]-=FC;
for(j=i; j!=1; j=T[j])
{
flux[T[j]][j]+=FC;
flux[j][T[j]]-=FC;
}
}
}
}