Pagini recente » Cod sursa (job #2190046) | Cod sursa (job #2218542) | Cod sursa (job #184559) | Cod sursa (job #1610852) | Cod sursa (job #2276929)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,i,j,nr,ok,np,vmx=111100000,nv,rez;
int d[1024],t[1024],c[1024][1024],v[1024];
vector<int> ad[1024];
deque<int> q;
int make_bf()
{
for(int i=1;i<=n;i++)
d[i]=0;
q.push_back(1);
d[1]=1; t[1]=0;
while(!q.empty())
{
nr=q.front();
q.pop_front();
for(int j:ad[nr])
if(c[nr][j] && d[j]==0)
{
d[j]=d[nr]+1; t[j]=nr;
q.push_back(j);
}
}
return d[n];
}
int update()
{
int x,mn=vmx,take=vmx;
x=n;
nv=0;
while(x>1)
{
mn=t[x];
take=min(take, c[mn][x]);
v[++nv]=x;
if(nv>2*n)
{ return 0; }
x=mn;
}
x=n;
while(x>1)
{
mn=t[x];
c[mn][x]-=take;
c[x][mn]+=take;
x=mn;
}
return take;
}
int main() {
fin>>n>>m;
while(m--)
{
fin>>i>>j>>nr;
c[i][j]+=nr;
ad[i].push_back(j);
ad[j].push_back(i);
}
while(make_bf())
for(int i:ad[n])
{
t[n]=i;
rez+=update();
}
fout<<rez<<"\n";
}