版权声明:本文为博主原创文章,未经博主允许必须转载。 https://blog.csdn.net/qq_35950004/article/details/83659064
#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#define maxn 1005
#define LL long long
#define inf 0x3f3f3f3f3f3fll
using namespace std;
int n,m,S,T;
LL c[maxn][maxn],stm;
bool flag;
int d[maxn],vd[maxn];
LL aug(int now,LL Max)
{
if(now==T) return Max;
LL inc,st=Max;
int Min=T-1;
for(int i=1;i<=m && st;i++)
if(c[now][i])
{
if(d[i]+1==d[now])
{
inc=aug(i,min(st,c[now][i]));
c[now][i]-=inc;
c[i][now]+=inc;
st-=inc;
if(flag) return Max-st;
}
Min=min(Min,d[i]);
}
if(st==Max)
{
(!--vd[d[now]]) && (flag=1);
vd[d[now]=Min+1]++;
}
return Max-st;
}
LL sap()
{
memset(d,0,sizeof d);
memset(vd,0,sizeof vd);
vd[0]=T;
for(stm=flag=0;!flag;stm+=aug(S,inf));
return stm;
}
int main()
{
int u,v,w;
scanf("%d%d",&n,&m);S=1,T=m;
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&u,&v,&w);
c[u][v]+=w;
}
printf("%lld\n",sap());
}