Pagini recente » Cod sursa (job #963301) | Cod sursa (job #2507938) | Cod sursa (job #2961135) | Cod sursa (job #1819445) | Cod sursa (job #2615967)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
int c[1005][1005],pred[1005];
vector<int> vec[1005];
const int inf=1e9+7;
int n,m,x,y,cap;
int flow,ads;
queue<int> q;
int main()
{
cin>>n>>m;
for(int i=1;i<=m;++i)
{
cin>>x>>y>>cap;
c[x][y]+=cap;
vec[x].push_back(y);
vec[y].push_back(x);
}
do
{
q.push(1); pred[1]=-1;
for(int i=2;i<=n;++i) pred[i]=0;
while(!q.empty())
{
int x=q.front();
q.pop();
for(auto y:vec[x])
if(c[x][y]>0 and pred[y]==0)
{
pred[y]=x;
q.push(y);
}
}
if(pred[n])
for(auto t:vec[n])
if(pred[t])
{
ads=c[t][n];
for(int k=t;k!=1;k=pred[k])
ads=min(ads,c[pred[k]][k]);
c[t][n]-=ads;
c[n][t]+=ads;
for(int k=t;k!=1;k=pred[k])
{
c[pred[k]][k]-=ads;
c[k][pred[k]]+=ads;
}
flow+=ads;
}
}while(pred[n]);
cout<<flow<<'\n';
return 0;
}