1 //poj 1273
2 #include <iostream>
3 #include <cstdio>
4 #include <cstring>
5 #include <queue>
6
7 using namespace std;
8 #define MAXN 202
9 #define inf 0x7ffffff
10 #define Min(x,y) (x>y?y:x)
11 int n;//顶点数
12 int flow[MAXN][MAXN];//残量网络
13 int maxflow;//最大流
14 int st,en;//源点,汇点
15 int a[MAXN];//a[v]表示s-v的最小残量
16 int cap[MAXN][MAXN];//容量限制
17 int pre[MAXN];//记录父亲
18
19 int EK()
20 {
21 queue<int>q;
22 memset(flow,0,sizeof(flow));//初始时残量网络为0
23 maxflow=0;
24 while(1)
25 {
26 memset(a,0,sizeof(a));
27 a[st]=inf;
28 q.push(st);
29 while(!q.empty())
30 {
31 int u=q.front();q.pop();
32 for(int v=1;v<=n;v++)
33 if(!a[v] && cap[u][v]>flow[u][v])//找到新节点v
34 {
35 pre[v]=u;q.push(v);
36 a[v]=Min(a[u],cap[u][v]-flow[u][v]);
37 }
38 }
39 if(a[en]==0) break;//找不到,则当前流已经是最大
40 for(int u=en;u!=st;u=pre[u])//从汇点往回走
41 {
42 flow[pre[u]][u]+=a[en];
43 flow[u][pre[u]]-=a[en];
44 }
45 maxflow+=a[en];
46 }
47 return maxflow;
48 }
49
50 int main()
51 {
52 int m;
53 while(~scanf("%d%d",&m,&n))
54 {
55 memset(cap,0,sizeof(cap));
56 int u,v,c;
57 while(m--)
58 {
59 scanf("%d%d%d",&u,&v,&c);
60 cap[u][v]+=c;
61 }
62 st=1;
63 en=n;
64 printf("%d\n",EK());
65 }
66 return 0;
67 }