Pagini recente » Cod sursa (job #2208967) | Cod sursa (job #841132) | Cod sursa (job #45386) | Cod sursa (job #1105195) | Cod sursa (job #1393428)
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
#define N 1005
int n,m,x,y,z,i,j,cost[N][N],p[N],flux;
vector<int> v[N];
int dfs()
{
memset(p,0,sizeof(p));
queue<int> Q;
Q.push(1);
p[1]=-1;
while(Q.size())
{
int x=Q.front();
Q.pop();
for(int i=0;i<v[x].size();++i)
{
y=v[x][i];
if (cost[x][y] > 0 && !p[y])
{
p[y]=x;
Q.push(y);
}
}
}
return p[n];
}
int main()
{
f>>n>>m;
for (i=1;i<=m;++i)
{
f>>x>>y>>z;
cost[x][y]=z;
v[x].push_back(y);
v[y].push_back(x);
}
while(dfs())
{
for(i=0;i<v[n].size();++i)
{
int y=v[n][i];
if (p[y]!=0 && cost[y][n] > 0)
{
int cap=cost[y][n];
for(j=y;j!=1;j=p[j])
cap=min(cap,cost[p[j]][j]);
for(j=y;j!=1;j=p[j])
{
cost[p[j]][j]-=cap;
cost[j][p[j]]+=cap;
}
flux +=cap;
}
}
}
g<<flux;
return 0;
}