Pagini recente » Cod sursa (job #289986) | Cod sursa (job #2835992) | Cod sursa (job #1950092) | Cod sursa (job #801460) | Cod sursa (job #2045928)
#include<bits/stdc++.h>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
vector<int> v[1001];
int n,m,FL,D[1001],C[1001][1001],F[1001][1001],BF();
void 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);
C[X][Y]=Z;
}
for(;BF();)UPD();
g<<FL;
return 0;
}
int BF()
{
int nod,i;
for(i=2;i<=n;i++)D[i]=0;D[1]=-1;
queue<int>Q;
Q.push(1);
for(;Q.size();Q.pop())
{
nod=Q.front();
for(auto vec:v[nod])
{
if(D[vec])continue;
if(C[nod][vec]<=F[nod][vec])continue;
D[vec]=nod;
Q.push(vec);
if(vec==n)return 1;
}
}
return 0;
}
void UPD()
{
int i,j,k,FC;
for(i=1;i<=n;i++)
{
if(!D[i])continue;
if(C[i][n]<=F[i][n])continue;
FC=C[i][n]-F[i][n];
for(j=i,k=D[i];j!=1;j=D[j],k=D[j])
FC=min(FC,C[k][j]);
if(!FC)continue;
FL+=FC;
F[i][n]+=FC;F[n][i]-=FC;
for(j=i,k=D[i];j!=1;j=D[j],k=D[j])
F[k][j]+=FC,F[j][k]-=FC;
}
}