#include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; #define MAX_VALUE 0x7fffffff int map[201][201]; int path[201]; //path[i]: 路径, 保存i点的前一节点path[i] int flow[201]; //flow[i]: 保存此节点的最大流 int N, M; int bfs() { memset(path, -1, sizeof(path)); queue<int> q; q.push(1); flow[1] = MAX_VALUE; while(!q.empty()) { int v = q.front(); q.pop(); if(v == M) return flow[v]; for(int i = 1; i <= M; ++i) { if(i != v && path[i] == -1 && map[v][i]) { path[i] = v; flow[i] = flow[v]>map[v][i]?map[v][i]:flow[v]; //寻找此路径上的最大流 q.push(i); } } } return -1; } int edmonds_karp() { int max_flow = 0; int v, cur, pre; while ((v = bfs()) != -1) //寻找增广路径 { max_flow += v; cur = M; while (cur != 1) { pre = path[cur]; map[pre][cur] -= v; //正向capicity减 map[cur][pre] += v; //反向加capicity cur = pre; } } return max_flow; } int main() { while(scanf("%d%d", &N, &M) != EOF) { int s, e, v; memset(map, 0, sizeof(map)); for(int i = 0; i < N; ++i) { scanf("%d%d%d", &s, &e, &v); map[s][e] += v; } printf("%d/n", edmonds_karp()); } return 0; }