// BFS 的 Edmonds_Karp
#include <iostream>
#include <queue>
using namespace std;
const int N = 210;//顶点最多个数
const int INF = 0x7FFFFFFF;//无穷大
int n,m,map[N][N],path[N],flow[N],start,end;//n为顶点,m为边,map为邻接矩阵
queue<int> q;
int bfs()
{
int i,t;
while (!q.empty()) q.pop();
memset(path,-1,sizeof(path));
path[start]=0,flow[start]=INF;
q.push(start);
while (!q.empty())
{
t=q.front();
q.pop();
if (t==end) break;
for (i=1;i<=n;i++)
{
if (i!=start && path[i]==-1 && map[t][i])
{
flow[i]=flow[t]<map[t][i]?flow[t]:map[t][i];
q.push(i);
path[i]=t;
}
}
}
if (path[end]==-1) return -1;
return flow[n]; //一次遍历之后的流量增量
}
int Edmonds_Karp()//从start到end的最大流
{
int max_flow=0,step,now,pre;
while ((step=bfs())!=-1) //找不到增路径时退出
{
max_flow+=step;
now=end;
while (now!=start)
{
pre=path[now];
map[pre][now]-=step; //更新正向边的实际容量
map[now][pre]+=step; //添加反向边
now=pre;
}
}
return max_flow;
}
int main()
{
int i,u,v,cost;
while (scanf("%d %d",&m,&n)!=EOF)
{
memset(map,0,sizeof(map));
for (i=0;i<m;i++)
{
scanf("%d %d %d",&u,&v,&cost);
map[u][v]+=cost; //not just only one input
}
start=1,end=n;
printf("%d\n",Edmonds_Karp());
}
return 0;
}
// Ford_Fulkerson
//最大流问题
#include <iostream>
#include <queue>
using namespace std;
int m,n,a,b,c,cost[201][201];
int Pre[201],Min[201],M=10000001;
bool visit[201];
int Bfs()
{
queue<int> q;
int temp;
visit[1]=true;
Pre[1]=0;
Min[1]=M;
q.push(1);
while (!q.empty())
{
temp=q.front();
q.pop();
if (temp==m) break;
for (int i=1;i<=m;i++)
{
if (!visit[i]&&cost[temp][i])
{
Min[i]=(Min[temp]<cost[temp][i]) ? Min[temp] : cost[temp][i];
Pre[i]=temp;
visit[i]=true;
q.push(i);
}
}
}
if (!visit[m]) return -1;
else return Min[m];
}
int Ford_Fulkerson()//求顶点1(源点)到顶点n(汇点)的最大流
{
int f,Max_Flow=0;
while ((f=Bfs())!=-1)
{
int temp=m;
Max_Flow+=f;
memset(visit,false,sizeof(visit));
while (temp!=1)
{
int r=Pre[temp];
cost[r][temp]-=f;
cost[temp][r]+=f;
temp=r;
}
}
return Max_Flow;
}
int main()
{
while (scanf("%d%d",&n,&m)!=EOF)
{
memset(cost,0,sizeof(cost));
for (int i=1;i<=n;i++)
{
scanf("%d%d%d",&a,&b,&c);
cost[a][b]+=c;
}
printf("%d\n",Ford_Fulkerson());
}
return 0;
}