Pagini recente » Cod sursa (job #1180165) | Cod sursa (job #2365950) | Cod sursa (job #2377153) | Cod sursa (job #1862803) | Cod sursa (job #2700467)
#include <fstream>
#include <vector>
#include <queue>
#define V 1000
using namespace std;
vector<int> graph[V];
queue<int> q;
int parent[V];
int cap[V][V];
int s,t,n,m,x,y,z;
ifstream in ("maxflow.in");
ofstream out ("maxflow.out");
void reset()
{
for(int i=0;i<n;i++)
{
parent[i]=-1;
}
}
int bfs()
{
q.push(s);
while(!q.empty())
{
int u = q.front();
q.pop();
for(auto v : graph[u])
{
if(parent[v]==-1 && cap[u][v]>0)
{
parent[v]=u;
q.push(v);
}
}
}
return parent[t];
}
void ek()
{
reset();
int flow=0;
while(bfs()!=-1)
{
for(auto v : graph[t])
{
int mincap = cap [v][t];
for (int i = v; i != 0; i = parent[i]) mincap = min(mincap, cap[parent[i]][i]);
for (int i = v; i != 0; i = parent[i])
{
cap[parent[i]][i] -= mincap;
cap[i][parent[i]] += mincap;
}
flow += mincap;
cap[v][t] -= mincap;
cap[t][v] += mincap;
}
reset();
}
out << flow;
}
int main()
{
in >> n >> m;
s=0;
t=n-1;
for(int i=0;i<m;i++)
{
in >> x >> y >> z;
x--;
y--;
cap[x][y] = z;
graph[x].push_back(y);
graph[y].push_back(x);
}
ek();
return 0;
}