Pagini recente » Cod sursa (job #1681960) | Cod sursa (job #3175162) | Cod sursa (job #2464166) | Cod sursa (job #3000088) | Cod sursa (job #2479172)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n, m;
vector<int> G[1001];
int C[1001][1001];
int F[1001][10001];
bool viz[1001];
int tata[1001];
bool BFS()
{
fill(viz + 1, viz + n + 1, false);
queue<int> q;
q.push(1);
viz[1] = true;
while(!q.empty())
{
int node = q.front();
q.pop();
if(node == n) continue;
for(int next : G[node])
{
if(C[node][next] == F[node][next] || viz[next]) continue;
viz[next] = true;
tata[next] = node;
q.push(next);
}
}
return viz[n];
}
int main()
{
fin >> n >> m;
int x, y, z;
for(int i = 1; i <= m; ++i)
{
fin >> x >> y >> z;
G[x].push_back(y);
G[y].push_back(x);
C[x][y] = z;
}
int maxflow = 0;
while(BFS())
{
for(int node : G[n])
{
if(!viz[node] || C[node][n] == F[node][n]) continue;
tata[n] = node;
int flow = 2000000000;
for(int i = n; i != 1; i = tata[i])
flow = min(flow, C[tata[i]][i] - F[tata[i]][i]);
if(!flow) continue;
for(int i = n; i != 1; i = tata[i])
{
F[tata[i]][i] += flow;
F[i][tata[i]] -= flow;
}
maxflow += flow;
}
}
fout << maxflow;
}