Pagini recente » Cod sursa (job #2910666) | Cod sursa (job #3274300) | Cod sursa (job #2795123) | Cod sursa (job #987320) | Cod sursa (job #952162)
Cod sursa(job #952162)
#include <fstream>
#include <vector>
#include <iostream>
#include <stdio.h>
using namespace std;
ifstream fi("maxflow.in");
ofstream fo("maxflow.out");
long n,m,i,j,C[1001][1001],viz[1001],TT[1001],F[1001][1001],rs;
vector< long > G[1001],q;
int DFS(){
for (i=1; i<=n; i++) viz[i]=0;
q.push_back(1); viz[1]=1;
while (!q.empty()){
long nod=q.back(); q.pop_back();
for (size_t k=0; k<G[nod].size(); k++){
int v=G[nod][k];
if (!viz[v] && C[nod][v]>0){
viz[v]=1;
q.push_back(v);
TT[v]=nod;
if (v==n) return 1;
}
}
}
return 0;
}
int main(){
fi >> n >> m;
for (i=1; i<=m; i++){
int x,y,z;
fi >> x >> y >> z;
G[x].push_back(y);
C[x][y]=z;
}
while (DFS()){
/*
for (i=1; i<=n; i++) cout << TT[i] << ' ';
cout << endl;
for (i=1; i<=n; i++){
for (j=1; j<=n; j++){
cout << C[i][j] << ' ';
}
cout << endl;
}
cout << endl;
for (i=1; i<=n; i++){
for (j=1; j<=n; j++){
cout << F[i][j] << ' ';
}
cout << endl;
}
*/
long fmin=1000000;
for (i=n; i!=1; i=TT[i]){
fmin=min(fmin,(C[TT[i]][i]));
}
if (!fmin) break;
for (i=n; i!=1; i=TT[i]){
F[TT[i]][i]+=fmin;
C[TT[i]][i]-=fmin;
}
rs+=fmin;
/*for (i=1; i<=n; i++) cout << TT[i] << ' ';
cout << endl;
for (i=1; i<=n; i++){
for (j=1; j<=n; j++){
cout << C[i][j] << ' ';
}
cout << endl;
}
cout << endl;
for (i=1; i<=n; i++){
for (j=1; j<=n; j++){
cout << F[i][j] << ' ';
}
cout << endl;
}
cout << rs << endl;*/
}
fo << rs;
return 0;
}