Pagini recente » Cod sursa (job #1477354) | Cod sursa (job #852751) | Cod sursa (job #859888) | Cod sursa (job #2940913) | Cod sursa (job #3146119)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
vector<int> x[1001];
int n, maxf, p[1001], cost[1001][1001];
bool BFS()
{for(int i=1;i<=n;i++)
p[i]=0;
queue<int> q;
int a;
p[1]=1;
q.push(1);
while(q.empty()!=1)
{a=q.front();
vector<int>:: iterator I;
for(I=x[a].begin();I<x[a].end();I++)
if(p[*I]==0 && cost[a][*I]>0)
{p[*I]=p[a]+1;
q.push(*I);
}
q.pop();
}
return p[n]!=0;
}
int DFS(int nod, int mini)
{if(nod==n || mini==0)
return mini;
vector<int>:: iterator I;
for(I=x[nod].begin();I<x[nod].end();I++)
if(p[*I]==1+p[nod] && cost[nod][*I]>0)
{long long int a=DFS(*I, min(mini, cost[nod][*I]));
if(a!=0)
{cost[nod][*I]-=a;
cost[*I][nod]+=a;
return a;
}
}
return 0;
}
int main()
{ int m, a, b, c;
fin>>n>>m;
for(int i=1;i<=m;i++)
{fin>>a>>b>>c;
x[a].push_back(b);
x[b].push_back(a);
cost[a][b]=c;
}
while(BFS())
while(int v=DFS(1, 1e9))
maxf+=v;
fout<<maxf;
return 0;
}