Pagini recente » Cod sursa (job #2797700) | Cod sursa (job #3269259) | Cod sursa (job #2177741) | Cod sursa (job #2172975) | Cod sursa (job #3229792)
#include <bits/stdc++.h>
using namespace std;
#define INFILE "maxflow.in"
#define OUTFILE "maxflow.out"
const int N_MAX = 1e3 + 5;
const int INF = 1e9;
int n, m;
bool visited[N_MAX];
vector<int> adj[N_MAX];
int parent[N_MAX], capacity[N_MAX][N_MAX];
bool bfs(){
memset(visited, 0, sizeof visited);
queue<int> q;
q.push(1);
visited[1] = true;
while(!q.empty()){
int node = q.front();
q.pop();
if(node != n){
for(auto &to : adj[node]){
if(!visited[to] && capacity[node][to]){
parent[to] = node;
q.push(to);
visited[to] = true;
}
}
}
}
return visited[n];
}
void solve(){
cin >> n >> m;
for(int i = 0; i < m; ++i){
int node1, node2, cost;
cin >> node1 >> node2 >> cost;
adj[node1].push_back(node2);
adj[node2].push_back(node1);
capacity[node1][node2] = cost;
}
int ans = 0;
while(bfs()){
for(auto &to : adj[n]){
if(visited[to] && capacity[to][n]){
parent[n] = to;
int aux = INF;
for(int i = n; i != 1; i = parent[i]){
aux = min(aux, capacity[parent[i]][i]);
}
for(int i = n; i != 1; i = parent[i]){
capacity[parent[i]][i] -= aux;
capacity[i][parent[i]] += aux;
}
ans += aux;
}
}
}
cout << ans << '\n';
}
int main(){
ios_base::sync_with_stdio(false);
// freopen(INFILE, "r", stdin);
// freopen(OUTFILE, "w", stdout);
cin.tie(0), cout.tie(0);
solve();
return 0;
}