intbfs(){ bool vis[20] = {0}; memset(low, 0, sizeof(low)); queue<int> q; low[st] = oo; q.push(st); vis[st] = true; while (!q.empty()) { int u = q.front(); q.pop(); for (int v = 1; v <= n; v++) { if (!vis[v] && c[u][v]) { vis[v] = true; pre[v] = u; q.push(v); low[v] = min(c[u][v], low[u]); } } } if (low[st]) { int u = ed; do { c[pre[u]][u] -= low[ed]; c[u][pre[u]] += low[ed]; u = pre[u]; } while (u != st); } return low[ed]; }
intmaxflow(){ int ret = 0; do { ret += bfs(); } while (low[ed]); return ret; }
intmain(){ int t, m; int cnt = 0; t = get(); while (t--) { cnt++; n = get(); m = get(); memset(c, 0, sizeof(c)); for (int i = 0; i < m; i++) { int u = get(); int v = get(); int w = get(); c[u][v] += w; } st = 1; ed = n; printf("Case %d: %d\n", cnt, maxflow()); } return0; }