Pagini recente » Sarac Sau Rege | Statistici Pojar Diana (sky_girl) | Grozavesti | Cod sursa (job #315026) | Cod sursa (job #1013018)
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
vector<short int>v[1001];
int c[1001][1001],s[1001][1001];
char a[1001];
short int t[1001];
int i,x,y,z,nod,n,m,ss,s1;
void mf(short int nod)
{
short int i;
a[nod]=1;
if(nod==n)
{
z=1;
return;
}
x=v[nod].size();
for(i=0;i<x;i++)
{
if(!a[v[nod][i]] && c[nod][v[nod][i]]-s[nod][v[nod][i]]>0)
{
t[v[nod][i]]=nod;
mf(v[nod][i]);
if(z==1) break;
}
}
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
v[x].push_back(y);
v[y].push_back(x);
c[x][y]=z;
}
ss=0;
while(n)
{
for(i=1;i<=n;i++) a[i]=0;
z=0;
mf(1);
if(z)
{
nod=t[n];
s1=c[nod][n]-s[nod][n];
while(nod>1)
{
z=nod;
nod=t[z];
s1=min(s1,c[nod][z]-s[nod][z]);
}
ss+=s1;
nod=t[n];
s[nod][n]-=s1;
s[n][nod]+=s1;
while(nod>1)
{
z=nod;
nod=t[z];
s[nod][z]+=s1;
s[z][nod]-=s1;
}
}
else break;
}
printf("%d",ss);
fclose(stdin);
fclose(stdout);
return 0;
}