Pagini recente » Cod sursa (job #2230300) | Cod sursa (job #2042875) | Cod sursa (job #2566176) | Cod sursa (job #20635) | Cod sursa (job #2936362)
#include <fstream>
#include <vector>
#define MAXN 10001
#define MAXINT 1000000000
using namespace std;
vector<int> edges[MAXN][2];
int n;
int getIndex(int node, int next){
for(int i=0;i<edges[node][0].size();i++){
if(edges[node][0][i]==next){
return i;
}
}
return -1;
}
int findPath(int node, int flow) {
if(node == n)
return flow;
for(int i = 0; i < edges[node][0].size(); i++) {
int next = edges[node][0][i];
int cap = edges[node][1][i];
if(cap > 0) {
int pathFlow = findPath(next, min(flow, cap));
if(pathFlow > 0) {
edges[node][1][i] -= pathFlow;
int nextIndex = getIndex(next, node);
if(nextIndex == -1){
edges[next][0].push_back(node);
edges[next][1].push_back(pathFlow);
} else {
edges[next][1][nextIndex] += pathFlow;
}
return pathFlow;
}
}
}
return -1;
}
int main()
{
int m;
ifstream inFile;
ofstream outFile;
inFile.open("maxflow.in");
outFile.open("maxflow.out");
inFile >> n >> m;
for (int i = 0; i < m; i++)
{
int a, b, c;
inFile >> a >> b >> c;
edges[a][0].push_back(b);
edges[a][1].push_back(c);
}
int maxFlow = 0;
while(true) {
int pathFlow = findPath(1, MAXINT);
if(pathFlow == -1)
break;
maxFlow += pathFlow;
}
outFile << maxFlow << endl;
}