Pagini recente » Clasament ioi_bil_c2 | Cod sursa (job #163962) | Cod sursa (job #2752517) | Cod sursa (job #755668) | Cod sursa (job #1853812)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
int n,m,x,y,cost,i,flow;
int c[1001][1001];
int t[1001],q[1001];
bool viz[1001];
void update()
{
int mini=2000000000;
int aux=n;
while(aux>1)
{
mini=min(mini,c[t[aux]][aux]);
aux=t[aux];
}
flow+=mini;
aux=n;
while(aux>1)
{
c[t[aux]][aux]-=mini;
c[aux][t[aux]]+=mini;
aux=t[aux];
}
}
bool bfs()
{
q[1]=1;
int l=1, r=1;
int nod=1;
int ok=0;
memset(viz,0,sizeof(viz));
viz[1]=1;
while(l<=r)
{
nod=q[l];
l++;
for(int i=1;i<=n;++i)
{
if(viz[i]==0 && c[nod][i]>0)
{
t[i]=nod;
if(i==n) update(), ok=1;
else
q[++r]=i, viz[i]=1;
}
}
}
return ok;
}
int main()
{
cin>>n>>m;
for(i=1;i<=m;++i)
{
cin>>x>>y>>cost;
c[x][y]=cost;
}
while(bfs())
{
}
cout<<flow;
return 0;
}