#include<iostream> #define INF 88888888 struct Edge{ int v,w,next; }; int f_min(int x,int y){ return x<y?x:y; } Edge edge[500]; int scr,sink,N,M,en; int head[216],cur[216],gap[216],dis[216],pre[216]; void insert(int u,int v,int w){ edge[en].v=v; edge[en].w=w; edge[en].next=head[u]; head[u]=en++; edge[en].v=u; edge[en].w=0; edge[en].next=head[v]; head[v]=en++; } void get_data(int m){ int a,b,c; memset(head,-1,sizeof(head));en=0; while(m--){ scanf("%d%d%d",&a,&b,&c); insert(a,b,c); } } int sap(int scr,int sink,int vn){ int i,res=0; for(i=1;i<=vn;i++)cur[i]=head[i]; memset(gap,0,sizeof(gap)); memset(dis,0,sizeof(dis)); int u,v,stream; gap[0]=vn;u=scr;stream=INF;pre[scr]=scr; while(dis[scr]<vn){ for(;cur[u]!=-1;cur[u]=edge[cur[u]].next){ v=edge[cur[u]].v; if(dis[u]!=dis[v]+1||!edge[cur[u]].w)continue; stream=f_min(stream,edge[cur[u]].w); pre[v]=u; u=v; if(u==sink){ res+=stream; while(u!=scr){ u=pre[u]; edge[cur[u]].w-=stream; edge[cur[u]^1].w+=stream; } stream=INF; } break; } if(cur[u]!=-1)continue; int i,mindis=vn; for(i=head[u];i!=-1;i=edge[i].next){ v=edge[i].v; if(!edge[i].w)continue; if(dis[v]<mindis){ mindis=dis[v]; cur[u]=i; } } if((--gap[dis[u]])==0)break; gap[dis[u]=mindis+1]++; u=pre[u]; } return res; } int main(){ int i; while(scanf("%d%d",&M,&N)!=EOF){ get_data(M); printf("%d/n",sap(1,N,N)); } return 0; }