Pagini recente » Cod sursa (job #2610104) | Cod sursa (job #3146583) | Cod sursa (job #2923119) | Cod sursa (job #159309) | Cod sursa (job #2485905)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream in ("maxflow.in");
ofstream out ("maxflow.out");
int flux,n,i,j,x,y,cost,dad,node,t[1000],s,st,f[101][101],c[101][101],m,cap;
vector<int>g[1001];
bool bfs (int st,int d)
{
for(int i=1; i<=n; i++)t[i]=-1;
t[s]=0;
queue<int>q;
q.push(st);
while(!q.empty())
{
int node=q.front();
q.pop();
for(auto it:g[node])
{
if(t[it]==-1&&c[node][it]>f[node][it])
{
t[it]=node;
if(it==d)return 1;
q.push(it);
}
}
}
return 0;
}
int maxflow(int st,int d)
{
while(bfs(st,d))
{
for(auto it:g[d])
{
if(t[it]!=-1)
{
int add=c[it][d]-f[it][d];
int node=it,dad=0;
while(node!=st)
{
dad=t[node];
add=min(add,c[dad][node]-f[dad][node]);
node=dad;
}
f[it][d]+=add;
f[d][it]-=add;
flux+=add;
node=it;
while(node!=st)
{
dad=t[node];
f[dad][node]+=add;
f[node][dad]-=add;
node=dad;
}
}
}
}
return flux;
}
int main()
{
in>>n>>m;
for(i=1; i<=m; i++)
{
in>>x>>y>>cap;
c[x][y]=cap;
f[x][y]=0;
g[x].push_back(y);
g[y].push_back(x);
}
out<<maxflow(1,n);
return 0;
}