Pagini recente » Cod sursa (job #3267139) | Cod sursa (job #2177635) | Cod sursa (job #1664798) | Cod sursa (job #381228) | Cod sursa (job #2959725)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
int n, cost[1002][1002];
vector<int> adiacenta[1002];
vector<int> parinte;
queue<int> q;
bool drum() {
parinte=vector <int>(n+1,-1);
parinte[1]=0;
q.push(1);
while(!q.empty()) {
int z=q.front();
q.pop();
for (auto x: adiacenta[z]) {
if (parinte[x]==-1 && cost[z][x]>0) {
q.push(x);
parinte[x]=z;
}
}
}
/*for (int i = 0; i < n; ++i) {
cout<<parinte[i]<<" ";
}*/
//cout<<endl;
return parinte[n]!=-1;
}
int main() {
int m, a, b, c,r=0;
cin>>n>>m;
drum();
for (int i = 0; i < m; ++i) {
cin>>a>>b>>c;
adiacenta[a].push_back(b);
adiacenta[b].push_back(a);
cost[a][b]=c;
}
while(drum()) {
int min=999999999;
for (int i = n; i != 1; i=parinte[i]) {
if (min>cost[parinte[i]][i]) {
min=cost[parinte[i]][i];
}
}
for (int i = n; i != 1; i=parinte[i]) {
cost[parinte[i]][i]-=min;
cost[i][parinte[i]]+=min;
}
r+=min;
}
cout<<r;
return 0;
}