#include <algorithm> #include <cstdio> #include <iostream> #include <queue> #include <cstring> using namespace std; const int N = 205; struct Node{ int c, end; int next; } E[2 * N]; int pre[N]; // 记录前驱 int head[N]; int path[N]; // 记录路径 int NE, NV; // 边 点 int EK(int start, int end){ int maxflow = 0; while(true){ memset(pre, -1, sizeof(pre)); queue<int> Q; Q.push(start); while(!Q.empty()){ int u = Q.front(); Q.pop(); for(int i = head[u]; i != -1; i = E[i].next){ int v = E[i].end; if(pre[v] == -1 && E[i].c > 0){ pre[v] = u; Q.push(v); path[v] = i; } } if(pre[end] != -1) break;//达到汇点,跳出BFS } if(pre[end] == -1) break; //无增广路,跳出大循环 int mindelta = -1; for(int v = end; v != start; v = pre[v]){ if(mindelta == -1 || E[path[v]].c < mindelta){ mindelta = E[path[v]].c; }//寻找最小的delta } for(int v = end; v != start; v = pre[v]){ E[ path[v] ].c -= mindelta; //流量减去delta E[ path[v] ^ 1 ].c += mindelta; // +反悔的值 } maxflow += mindelta; } return maxflow; } void Insert(int u, int v, int c, int cc = 0){ E[NE].c = c; E[NE].end = v; E[NE].next = head[u]; head[u] = NE++; E[NE].c = cc; E[NE].end = u; E[NE].next = head[v]; head[v] = NE++; } int main(){ int n, m; while(scanf("%d %d", &n, &m) != EOF){ NE = 0; NV = 205; for(int i = 0; i < N; i++) head[i] = -1; while(n--){ int u, v, c; scanf("%d %d %d", &u, &v, &c); Insert(u, v, c, 0); } printf("%d/n", EK(1, m)); } }