Pagini recente » Cod sursa (job #1672396) | Cod sursa (job #2935483) | Cod sursa (job #1606617) | Cod sursa (job #3183033) | Cod sursa (job #2071801)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
#define lim 1010
#define inf 2e9
int n,m,C[lim][lim],q[lim],viz[lim],dad[lim],F[lim][lim];
vector <int> G[lim];
bool bfs()
{
int st=1, dr=1, nod;
memset (viz, 0 , sizeof(viz));
q[1]=1;
viz[1]=1;
while (st<=dr)
{
nod = q[st++];
for (auto it:G[nod])
if (!viz[it] && C[nod][it] > F[nod][it])
{
viz[it]=1;
if (it==n)
continue;
q[++dr]=it;
dad[it]=nod;
}
}
return viz[n];
}
int main()
{
int x,y;
fin>>n>>m;
for (int i=1; i<=m; i++)
{
fin>>x>>y;
fin>>C[x][y];
G[x].push_back(y);
G[y].push_back(x);
}
int maxflow=0, flow;
while (bfs())
for (auto it:G[n])
if (C[it][n] > F[it][n])
{
dad[n]=it;
flow=inf;
for (int i=n; dad[i]; i=dad[i])
flow = min (flow, C[dad[i]][i] - F[dad[i]][i]);
for (int i=n; dad[i]; i=dad[i])
{
F[dad[i]][i] += flow;
F[i][dad[i]] -= flow;
}
maxflow+=flow;
}
fout<<maxflow;
fout.close();
return 0;
}