#include <algorithm><br />#include <cstdio><br />#include <iostream><br />#include <queue><br />#include <cstring><br />using namespace std;<br />const int N = 205;<br />struct Node{<br />int c, end;<br />int next;<br />} E[2 * N];<br />int pre[N]; // 記錄前驅<br />int head[N];<br />int path[N]; // 記錄路徑<br />int NE, NV; // 邊 點<br />int EK(int start, int end){<br />int maxflow = 0;<br />while(true){<br />memset(pre, -1, sizeof(pre));<br />queue<int> Q;<br />Q.push(start);<br />while(!Q.empty()){<br />int u = Q.front();<br />Q.pop();<br />for(int i = head[u]; i != -1; i = E[i].next){<br />int v = E[i].end;<br />if(pre[v] == -1 && E[i].c > 0){<br />pre[v] = u;<br />Q.push(v);<br />path[v] = i;<br />}<br />}<br />if(pre[end] != -1)<br />break;//達到匯點,跳出BFS<br />}<br />if(pre[end] == -1)<br />break; //無增廣路,跳出大迴圈<br />int mindelta = -1;<br />for(int v = end; v != start; v = pre[v]){<br />if(mindelta == -1 || E[path[v]].c < mindelta){<br />mindelta = E[path[v]].c;<br />}//尋找最小的delta<br />}<br />for(int v = end; v != start; v = pre[v]){<br />E[ path[v] ].c -= mindelta;<br />//流量減去delta<br />E[ path[v] ^ 1 ].c += mindelta;<br />// +反悔的值<br />}<br />maxflow += mindelta;<br />}<br />return maxflow;<br />}<br />void Insert(int u, int v, int c, int cc = 0){<br />E[NE].c = c;E[NE].end = v;<br />E[NE].next = head[u];head[u] = NE++;<br />E[NE].c = cc;E[NE].end = u;<br />E[NE].next = head[v];head[v] = NE++;<br />}<br />int main(){</p><p>int n, m;<br />while(scanf("%d %d", &n, &m) != EOF){<br />NE = 0;<br />NV = 205;<br />for(int i = 0; i < N; i++)<br />head[i] = -1;<br />while(n--){<br />int u, v, c;<br />scanf("%d %d %d", &u, &v, &c);<br />Insert(u, v, c, 0);<br />}<br />printf("%d/n", EK(1, m));<br />}<br />}