Pagini recente » Cod sursa (job #3138797) | Cod sursa (job #2855402) | Cod sursa (job #2296185) | Cod sursa (job #2829457) | Cod sursa (job #1938299)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
const int nmax = 1005;
int N,M,C[nmax][nmax],F[nmax][nmax],TT[nmax];
bool viz[nmax];
queue < int > Q;
vector < int > L[nmax];
inline void Read()
{
int i,x,y,z;
fin >> N >> M;
for(i = 1; i <= M; i++)
{
fin >> x >> y >> z;
L[x].push_back(y);
L[y].push_back(x);
C[x][y] += z;
}
}
inline bool BFS()
{
int i,nod;
for(i = 2; i <= N; i++) viz[i] = false;
viz[1] = true; Q.push(1);
while(!Q.empty())
{
nod = Q.front();
Q.pop();
if(nod == N) continue;
for(auto it : L[nod])
if(!viz[it] && F[nod][it] < C[nod][it])
{
viz[it] = true;
TT[it] = nod;
Q.push(it);
}
}
return viz[N];
}
inline void Solve()
{
int i,j,maxflow = 0,minflow;
while(BFS())
{
for(auto it : L[N])
if(viz[it])
{
minflow = C[it][N] - F[it][N];
for(j = it; TT[j] != 0; j = TT[j])
minflow = min(minflow,C[TT[j]][j] - F[TT[j]][j]);
if(!minflow) continue;
F[it][N] += minflow; F[N][it] -= minflow;
for(j = it; TT[j] != 0; j = TT[j])
{
F[TT[j]][j] += minflow;
F[j][TT[j]] -= minflow;
}
maxflow += minflow;
}
}
fout << maxflow << "\n";
fout.close();
}
int main()
{
Read();
Solve();
return 0;
}