Pagini recente » Cod sursa (job #1746559) | Cod sursa (job #2116470) | Cod sursa (job #67075) | Cod sursa (job #2006673) | Cod sursa (job #2811416)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1e3,INF = 2e9;
vector <int> e[NMAX + 5];
int cap[NMAX + 5][NMAX + 5],flux[NMAX + 5][NMAX + 5];
bool viz[NMAX + 5];
int ans = 0,n,m;
int dfs(int node, int fluxmn) {
if (fluxmn == 0 || viz[node])
return 0;
if (node == n) {
ans += fluxmn;
return fluxmn;
}
viz[node] = 1;
int x,y,s = 0;
for (int i = 0;i < e[node].size();i++) {
if (cap[node][e[node][i]] > flux[node][e[node][i]]) {
y = cap[node][e[node][i]] - flux[node][e[node][i]];
x = dfs(e[node][i], min(fluxmn, y));
fluxmn -= x;
s += x;
flux[node][e[node][i]] += x;
flux[e[node][i]][node] -= x;
}
}
return s;
}
void init() {
for (int i = 1;i <= n;i++)
viz[i] = 0;
}
int main()
{
ifstream fin("flux.in");
ofstream fout("flux.out");
int u,v,cost;
fin >> n >> m;
for (int i = 0;i < m;i++) {
fin >> u >> v;
fin >> cap[u][v];
e[u].push_back(v);
e[v].push_back(u);
}
while (dfs(1, INF)) {
init();
}
// for (int i = 1;i <= n;i++) {
// for (int j = 1;j <= n;j++) {
// fout << cap[i][j] << " ";
// }
// }
fout << ans;
return 0;
}