From db4e8d491270373979cd00d2de62a3c1ce25e484 Mon Sep 17 00:00:00 2001 From: subcrip Date: Sun, 19 May 2024 13:41:53 +0800 Subject: [PATCH] Add graph/examples/passive_flow_with_demands.cc Signed-off-by: subcrip --- graph/examples/passive_flow_with_demands.cc | 77 +++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 graph/examples/passive_flow_with_demands.cc diff --git a/graph/examples/passive_flow_with_demands.cc b/graph/examples/passive_flow_with_demands.cc new file mode 100644 index 0000000..8610c9e --- /dev/null +++ b/graph/examples/passive_flow_with_demands.cc @@ -0,0 +1,77 @@ +// ... + +#define SINGLE_TEST_CASE +// #define DUMP_TEST_CASE 7219 +// #define TOT_TEST_CASE 10000 + +void dump() {} + +void dump_ignore() {} + +void prep() { +} + +struct dinic { + // ... +}; + +void solve() { + read(int, n, m); + dinic net(n + 1); + vector init(n + 1); + vector res(m); + for (int i = 0; i < m; ++i) { + read(int, u, v, lower, upper); + net.add_edge(u, v, upper - lower, i, -1); + init[v] += lower; // in + init[u] -= lower; // out + res[i] += lower; + } + for (int i = 1; i <= n; ++i) { + if (init[i] > 0) { + net.add_edge(0, i, init[i], -1, -1); + } else if (init[i] < 0) { + net.add_edge(i, n + 1, -init[i], -1, -1); + } + } + net.run(0, n + 1); + for (auto&& [from, e] : enumerate(net.edges)) { + for (auto&& [to, cap, flow, rev, mark] : e) { + if ((from == 0 or to == n + 1) and flow != cap) { + cout << "NO\n"; + return; + } + if (mark != -1) { + res[mark] += flow; + } + } + } + cout << "YES\n"; + copy(res.begin(), res.end(), oi(cout, "\n")); +} + +int main() { +#if __cplusplus < 201703L || defined(_MSC_VER) && !defined(__clang__) + assert(false && "incompatible compiler variant detected."); +#endif + untie, cout.tie(NULL); + prep(); +#ifdef SINGLE_TEST_CASE + solve(); +#else + read(int, t); + for (int i = 0; i < t; ++i) { +#ifdef DUMP_TEST_CASE + if (t != (TOT_TEST_CASE)) { + solve(); + } else if (i + 1 == (DUMP_TEST_CASE)) { + dump(); + } else { + dump_ignore(); + } +#else + solve(); +#endif + } +#endif +}