Pagini recente » Cod sursa (job #1406507) | Cod sursa (job #1227203) | Cod sursa (job #434016) | Cod sursa (job #799659) | Cod sursa (job #2301055)
#include <bits/stdc++.h>
#define N 1005
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
int n,m,pater[N],graph[N][N],Rgraph[N][N],ap[N];
deque <int> q;
vector <int> lista[N];
bool BFS(int node)
{
memset(pater,-1,sizeof(pater));
memset(ap,0,sizeof(ap));
pater[node]=0;
q.push_back(node);
while(!q.empty())
{
int p=q.front();
q.pop_front();
for(int i=0; i<lista[p].size(); i++)
{
if(graph[p][lista[p][i]]>0 && !ap[lista[p][i]])
{
pater[lista[p][i]]=p;
ap[lista[p][i]]=1;
q.push_back(lista[p][i]);
}
}
}
if(ap[n])
return true;
return false;
}
int main()
{
in >> n >> m;
for(int i=1; i<=m; i++)
{
int x,y;
in >> x >> y;
in >> graph[x][y];
lista[x].push_back(y);
lista[y].push_back(x);
}
int max_flow=0;
while(BFS(1))
{
int current_flow=99999999;
for(int i=n; i!=1; i=pater[i])
{
int j=pater[i];
current_flow=min(current_flow,graph[j][i]);
}
for(int i=n; i!=1; i=pater[i])
{
int j=pater[i];
graph[j][i]-=current_flow;
graph[i][j]+=current_flow;
}
max_flow+=current_flow;
}
out << max_flow;
return 0;
}