int main() { int Test; scanf("%d", &Test); while (Test--) { cin >> N >> M; int source = 0, sink = N + M + 1; sap.init(N + M + 2); for (int i = 1; i <= N; i++) { int t; cin >> t; sap.addCap(M + i, sink, t); } int Sum = 0; for (int i = 1; i <= M; i++) { int a, b, c; cin >> a >> b >> c; sap.addCap(i, M + a, inf); sap.addCap(i, M + b, inf); sap.addCap(source, i, c); Sum += c; } int tmp = sap.solve(source, sink); cout << Sum - tmp << endl; } return 0; }
int main() { freopen("a", "r", stdin); int t, n, m; cin >> t; while (t--) { cin >> n >> m; sap.init(2 * n + 2); int source = 2 * n, sink = 2 * n + 1; int tmp; for (int i = 0; i < n; i++) { cin >> tmp; sap.addCap(n + i, sink, tmp); } for (int i = 0; i < n; i++) { cin >> tmp; sap.addCap(source, i, tmp); } int a, b; for (int i = 0; i < m; i++) { cin >> a >> b; a--; b--; sap.cap[a][n + b] = inf; } cout << sap.solve(source, sink) << endl; sap.output(source, sink); if (t > 0) cout << endl; } return 0; }
int solve(int source, int sink) { sap.init(n + 2); int tot = 0; upper[sink][source] = inf; lower[sink][source] = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (upper[i][j] < lower[i][j]) return -1; sap.addCap(i, j, upper[i][j] - lower[i][j]); sap.addCap(n, j, lower[i][j]); sap.addCap(i, n + 1, lower[i][j]); tot += lower[i][j]; } } if (sap.solve(n, n + 1) != tot) return -1; sap.solve(source, sink); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) flow[i][j] = upper[i][j] - sap.cap[i][j]; tot = 0; for (int i = 0; i < n; i++) tot += flow[source][i]; return tot; }
bool Check(long long lim) { sap.init(2 * N + 2); int source = 0, sink = 2 * N + 1; for (int i = 1; i <= N; i++) { sap.addCap(source, i, a[i]); sap.addCap(N + i, sink, b[i]); } for (int i = 1; i <= N; i++) for (int j = 1; j <= N; j++) if (dis[i][j] <= lim) { sap.addCap(i, N + j, inf); sap.addCap(j, N + i, inf); } int maxflow = sap.solve(source, sink); return maxflow == tot; }
int main() { freopen("a", "r", stdin); int T; scanf("%d", &T); while (T--) { scanf("%d%d", &M, &N); int source = M, sink = N; sap.init(M + 1); for (int i = 0; i < M; i++) { char str[10]; int num; scanf("%s %d\n", str, &num); if (str[0] == 'I') { sap.addCap(source, i, inf); //cout << "source " << i << " " << inf << endl; } for (int j = 1; j <= num; j++) { int k; scanf("%d", &k); sap.addCap(i, k, inf); sap.addCap(k, i, 1); //cout << i << " " << k << " " << inf << endl; //cout << k << " " << i << " " << 1 << endl; } } int tmp = sap.solve(source, sink); if (tmp >= inf) printf("PANIC ROOM BREACH\n"); else printf("%d\n", tmp); } return 0; }
int main() { freopen("a", "r", stdin); while (scanf("%d%d", &N, &M) != EOF) { int source = 0, sink = N - 1; sap.init(N); for (int i = 1; i <= M; i++) { int u, v, w; scanf("%d%d%d", &u, &v, &w); sap.addCap(u, v, w); } int tmp = sap.solve(source, sink); sap.dfs1(source); sap.dfs2(sink); sap.output(); } return 0; }