Pagini recente » Cod sursa (job #2676165) | Cod sursa (job #1538706) | Cod sursa (job #1941678) | Cod sursa (job #3272107) | Cod sursa (job #1418526)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
#define dim 1005
#define inf (1LL<<31)-1
int N,M;
int capacity[dim][dim],flow[dim][dim];
int T[dim];
vector<int> v[dim];
bool seen[dim];
int ST[dim];
bool bfs()
{
memset(seen,0,sizeof seen);
ST[0] = 1;
ST[1] = 1;
while(ST[0]){
int u = ST[ST[0]--];
if(u == N) continue;
for(auto p: v[u]){
if(seen[p] || capacity[u][p] == flow[u][p])
continue;
T[p] = u;
seen[p] = 1;
ST[++ST[0]] = p;
}
}
return seen[N];
}
int main()
{
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
fin >> N >> M;
for(int i = 1; i <= M; i++){
int x,y,z;
fin >> x >> y >> z;
v[x].push_back(y);
v[y].push_back(x);
capacity[x][y] = z;
}
int maxflow = 0;
while(bfs()){
for(auto p: v[N]){
if(flow[p][N] == capacity[p][N] || !seen[p])
continue;
int minflow = inf;
T[N] = p;
for(int i = N; i != 1; i = T[i])
minflow = min(minflow,capacity[T[i]][i] - flow[T[i]][i]);
for(int i = N; i != 1; i = T[i]){
flow[T[i]][i] += minflow;
flow[i][T[i]] -= minflow;
}
maxflow += minflow;
}
}
fout << maxflow << "\n";
}