Pagini recente » Cod sursa (job #2697660) | Cod sursa (job #1292000) | Cod sursa (job #3173912) | Cod sursa (job #1937844) | Cod sursa (job #2697656)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
vector<pair<short int, int> > g[1010];
int bi[1010], bv[1010], bp[1010], bs, bvnr = 1, bx = 0;
int* bf[1010];
int n, m;
int bfs(){
bs = 1;
bx = 0;
bi[0] = 0;
bvnr++;
bv[0] = bvnr;
while(bx < bs){
for(int x = 0;x<g[bx].size();x++){
auto &p = g[bx][x];
if((p.second) && (p.first == (n-1))){
long long int minf = 1ll<<60;
for(int x = bi[bx];x != 0;x = bp[x]){
if((*bf[x]) < minf)
minf = *bf[x];
}
for(int x = bi[bx];x != 0;x = bp[x]){
(*bf[x]) -= minf;
}
return minf;
}
if((p.second) && (bv[p.first] != bvnr)){
bv[p.first] = bvnr;
bi[bs++] = p.first;
bp[p.first] = bi[bx];
bf[p.first] = &p.second;
}
}
bx++;
}
return 0;
}
int main(){
in>>n>>m;
long long outv = 0;
for(int x = 0;x<m;x++){
short int a, b, c;;
in>>a>>b>>c;
g[a-1].push_back({b-1, c});
}
int tmp;
do{
tmp = bfs();
outv += tmp;
}while(tmp);
out<<outv<<endl;
return 0;
}