Pagini recente » Cod sursa (job #2688924) | Cod sursa (job #2079704) | Cod sursa (job #997415) | Cod sursa (job #3217540) | Cod sursa (job #2655178)
#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], t[nmax];
bool viz[nmax];
vector <int> G[nmax];
bool bfs(){
memset(viz, 0, sizeof viz);
queue <int> coada;
coada.push(1);
viz[1] = true;
while (!coada.empty()){
int nod = coada.front();
coada.pop();
if (nod == n) continue;
for (auto it : G[nod]){
if (viz[it] == true || f[nod][it] == c[nod][it]) continue;
coada.push(it);
viz[it] = true;
t[it] = nod;
}
}
return viz[n];
}
int main(){
fin >> n >> m;
for (int i = 1; i <= m; ++i){
int x, y, z;
fin >> x >> y >> z;
G[x].push_back(y);
G[y].push_back(x);
c[x][y] += z;
}
int flow, fmin;
for (flow = 0; bfs();){
for (auto it : G[n]){
if (!viz[it] || f[it][n] == c[it][n]) continue;
fmin = 1e9;
t[n] = it;
for (int nod = n; nod != 1; nod = t[nod]){
fmin = min(fmin, c[t[nod]][nod] - f[t[nod]][nod]);
}
if (fmin == 0) continue;
for (int nod = n; nod != 1; nod = t[nod]){
f[t[nod]][nod] += fmin;
f[nod][t[nod]] -= fmin;
}
flow += fmin;
}
}
fout << flow << "\n";
fin.close();
fout.close();
return 0;
}