Pagini recente » Cod sursa (job #3315117) | Cod sursa (job #3336537) | Cod sursa (job #1267606) | Cod sursa (job #1267592) | Cod sursa (job #3336806)
#include <bitset>
#include<fstream>
#include <vector>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int capacitate[1005][1005];
vector<vector<int> > muchii(1005);
int n, m;
int flow_maxim;
int last_flow;
bitset<1005> viz;
bool dfs(int nod, int flow_minim) {
viz[nod] = 1;
if (nod == n) {
flow_maxim += flow_minim;
last_flow = flow_minim;
return true;
}
for (auto vecin : muchii[nod]) {
if ( capacitate[nod][vecin] > 0 and viz[vecin] == 0) {
bool x = dfs(vecin , min(flow_minim,capacitate[nod][vecin]));
if (x == true) {
capacitate[nod][vecin] -= last_flow;
capacitate[vecin][nod] += last_flow;
return true;
}
}
}
return false;
}
int main() {
fin >> n >> m;
for (int i = 1; i <= m; i++) {
int a, b, cap;
fin >> a >> b >> cap;
muchii[a].push_back(b);
muchii[b].push_back(a);
capacitate[a][b] = capacitate[a][b] + cap;
}
while (dfs(1, 10000000)) {
for (int i = 1; i<=n ; i++) {
viz[i] = 0;
}
}
fout<<flow_maxim;
}