Pagini recente » Cod sursa (job #3226557) | Cod sursa (job #366606) | Cod sursa (job #1450663) | Cod sursa (job #512296) | Cod sursa (job #1829312)
#include <cstdio>
#include<vector>
#include<algorithm>
#define inf 1000000000
using namespace std;
vector<int> v[1000];
vector<int> invn;
int n,m,lst,rst,i,j,a,b,c,r;
int viz[1000],st[1000];
int mat[1000][1000],rez[1000][1000];
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",&a,&b,&c);
a--;
b--;
v[a].push_back(b);
v[b].push_back(a);
mat[a][b] = c;
}
while(1)
{
for(i=0;i<n;i++)
viz[i]=-2;
viz[0]=-1;
st[0]=0;
lst=1;
rst=0;
while(lst!=rst)
{
r=st[rst];
rst++;
if(r==n-1)
continue;
for(i=0;i<v[r].size();i++)
{
if(viz[v[r][i]]==-2&&mat[r][v[r][i]]!=rez[r][v[r][i]])
{
viz[v[r][i]]=r;
st[lst++]=v[r][i];
}
}
}
if(viz[n-1]==-2)
break;
for(i=0;i<v[n-1].size();i++)
{
if(viz[v[n-1][i]]!=-2&&mat[v[n-1][i]][n-1]!=rez[v[n-1][i]][n-1])
{
viz[n-1]=v[n-1][i];
a=n-1;
b=inf;
while(viz[a]!=-1)
{
b=min(b,mat[viz[a]][a]-rez[viz[a]][a]);
a=viz[a];
}
a=n-1;
while(viz[a]!=-1)
{
rez[a][viz[a]]-=b;
rez[viz[a]][a]+=b;
a=viz[a];
}
}
}
}
c=0;
for(i=0;i<v[0].size();i++)
c +=rez[0][v[0][i]];
printf("%d", c);
return 0;
}