Pagini recente » Cod sursa (job #566057) | Cod sursa (job #2813893) | Cod sursa (job #1805997) | Cod sursa (job #502694) | Cod sursa (job #2053747)
#include<bits/stdc++.h>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
const int N = 1001;
vector<int> v[N];
queue<int> Q;
int n , m , FL, t[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;
}
while(BF())
UPD();
g<<FL<<'\n';
return 0;
}
int BF()
{
int nod;
for(int i=2;i<=n;i++)t[i]=0;
t[1]=-1;
queue<int> Q;
Q.push(1);
for(;Q.size();)
{
nod=Q.front();Q.pop();
for(auto vec :v[nod])
{
if(t[vec])continue;
if(C[nod][vec]==F[nod][vec])continue;
t[vec]=nod;
Q.push(vec);
//if(vec==n)return 1;
}
}
return t[n];
}
void UPD()
{
int i,j,FC;
for(i=1;i<=n;i++)
{
if(!t[i])continue;
if(C[i][n]==F[i][n])continue;
FC=C[i][n]-F[i][n];
for(j=i;j!=1;j=t[j])
FC=min(FC,C[t[j]][j]-F[t[j]][j]);
if(!FC)continue;
FL+=FC;
F[i][n]+=FC;F[n][i]-=FC;
for(j=i;j!=1;j=t[j])
{
F[t[j]][j]+=FC;
//F[j][t[j]]-=FC;
}
}
}