Pagini recente » Cod sursa (job #2758111) | Cod sursa (job #671998) | Cod sursa (job #1485599) | Cod sursa (job #2848722) | Cod sursa (job #1393513)
#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));
p[1]=-1;
queue<int> q;
q.push(1);
while(q.size())
{
int x=q.front();
q.pop();
for (int i=0;i<v[x].size();++i)
{
int y=v[x][i];
if(p[y] == 0 && cost[x][y]>0)
{
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 x=v[n][i];
if (cost[x][n] > 0 && p[x] != 0)
{
int cap=cost[x][n];
for(j=x;j!=1;j=p[j])cap=min(cap,cost[p[j]][j]);
for(j=x;j!=1;j=p[j])
{
cost[p[j]][j]-=cap;
cost[j][p[j]]+=cap;
}
cost[x][n]-=cap;
flux+=cap;
}
}
g<<flux;
return 0;
}