Pagini recente » Cod sursa (job #1610286) | Cod sursa (job #2151638) | Cod sursa (job #1812375) | Cod sursa (job #111219) | Cod sursa (job #1393409)
#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] && cost[y][n] > 0)
{
int cap=cost[y][n];
for(i=y;p[i]!=-1;i=p[i])
cap=min(cap,cost[p[i]][i]);
for(i=y;p[i]!=-1;i=p[i])
{
cost[p[i]][i]-=cap;
cost[i][p[i]]+=cap;
}
flux +=cap;
}
}
}
g<<flux;
return 0;
}