Add graph/examples/passive_flow_with_demands.cc
Signed-off-by: subcrip <contact@subc.rip>
This commit is contained in:
parent
182d6283e3
commit
db4e8d4912
|
@ -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<int> init(n + 1);
|
||||
vector<int> 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<int>(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
|
||||
}
|
Loading…
Reference in New Issue