Pagini recente » Cod sursa (job #1950852) | Cod sursa (job #2570930) | Cod sursa (job #1508892) | Cod sursa (job #1190718) | Cod sursa (job #2447830)
#include <bits/stdc++.h>
using namespace std;
ifstream inf("maxflow.in");
ofstream outf("maxflow.out");
const int N=1010;
int n, m, cap[N][N], vis[N], fl[N][N], t[N];
int mf;
vector<int> v[N];
int bf();
void upd();
int main()
{
inf>>n>>m;
for(int i=1; i<=m; i++)
{
int x, y, z;
inf>>x>>y>>z;
v[x].push_back(y);
v[y].push_back(x);
cap[x][y]=z;
}
while(bf())
upd();
outf<<mf;
return 0;
}
int bf()
{
for(int i=2; i<=n; i++)
t[i]=0;
t[1]=-1;
queue<int> q;
q.push(1);
while(!q.empty())
{
int x=q.front();
q.pop();
for(auto it:v[x])
{
if(t[it])
continue;
if(cap[x][it]==fl[x][it])
continue;
t[it]=x;
q.push(it);
}
}
return t[n];
}
void upd()
{
int currF;
for(int i=1; i<=n; i++)
{
if(!t[i])
continue;
if(cap[i][n]==fl[i][n])
continue;
currF=cap[i][n]-fl[i][n];
for(int j=i; j!=1; j=t[j])
{
currF=min(currF, cap[t[j]][j]-fl[t[j]][j]);
}
if(!currF)
continue;
mf+=currF;
fl[i][n]+=currF;
fl[n][i]-=currF;
for(int j=i; j!=1; j=t[j])
{
fl[t[j]][j]+=currF;
fl[j][t[j]]-=currF;
}
}
}