Pagini recente » Cod sursa (job #2647276) | Cod sursa (job #1513977) | Cod sursa (job #990860) | Cod sursa (job #521965) | Cod sursa (job #2421990)
#include <bits/stdc++.h>
#define MAXN 1005
#define MAXM 5005
#define INF 0x3f3f3f3f
using namespace std;
int n, m, C[MAXN][MAXN], parent[MAXN];
int bfs()
{
int viz[MAXN];
memset(viz, 0, (n + 1) * sizeof(int));
memset(parent, 0, (n + 1) * sizeof(int));
queue<int> q;
viz[1] = 1;
q.push(1);
while(!q.empty()) {
int nod = q.front();
q.pop();
if(nod == n)
continue;
for(int i = 1; i <= n; ++i) {
if(!viz[i] && C[nod][i] > 0) {
viz[i] = 1;
parent[i] = nod;
q.push(i);
}
}
}
return viz[n];
}
int main()
{
ifstream in("maxflow.in");
ofstream out("maxflow.out");
in >> n >> m;
while(m--) {
int x, y, z;
in >> x >> y >> z;
C[x][y] = z;
}
int tflow = 0;
while(bfs()) {
for(int j = 1; j < n; ++j) {
if(C[j][n] > 0) {
parent[n] = j;
int flow = INF;
for(int i = n; i != 1; i = parent[i]) {
if(C[parent[i]][i] < flow) {
flow = C[parent[i]][i];
}
}
tflow += flow;
for(int i = n; i != 1; i = parent[i]) {
C[parent[i]][i] -= flow;
C[i][parent[i]] += flow;
}
}
}
}
out << tflow << "\n";
}