Pagini recente » Cod sursa (job #2086276) | Cod sursa (job #1502065) | Cod sursa (job #590088) | Cod sursa (job #523765) | Cod sursa (job #1829297)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector<int>g[1001];
int i, j, n, m, l, k, e[1001][1001], b[1001], c[5000], x, y, z, flow = 0;
int main()
{
ifstream f("maxflow.in");
ofstream _g("maxflow.out");
f >> n >> m;
//for(i=0; i<=n; i++) g[i].push_back(0);
for(i=1; i<=m; i++){
f >> x >> y >> z;
g[x].push_back(y);
g[y].push_back(x);
e[x][y] += z;
}
x = 5;
y = 7;
while(true)
{
for(j=1; j<=n; j++)
b[j]=0;
c[0] = 1;
c[1] = 1;
for(j=1; j<=c[0] && !b[n]; j++)
for(k=c[j],i=0; i<g[k].size(); i++)
if(!b[g[k][i]] && e[k][g[k][i]]){
c[0]++;
b[g[k][i]]=k;
c[c[0]] = g[k][i];
}
if(!b[n])
break;
for(i=0; i<g[n].size(); i++)
if(b[g[n][i]] && e[g[n][i]][n])
{
for(l=1000001,j=k=g[n][i],b[n]=k; j>1; j=b[j])
l=(l>e[b[j]][j])? e[b[j]][j]:l;
l= (l>e[k][n])? e[k][n]:l;
for(flow+=l,j=n; j>1; j=b[j])
e[b[j]][j]-=l,e[j][b[j]]+=l;
}
}
_g << flow << "\n";
}