pub struct NetworkSimplex<F, C> { /* private fields */ }
Implementations§
Source§impl<F, C> NetworkSimplex<F, C>
impl<F, C> NetworkSimplex<F, C>
Sourcepub fn new(n: usize) -> Self
pub fn new(n: usize) -> Self
Examples found in repository?
crates/library_checker/src/graph/assignment.rs (line 10)
6pub fn assignment(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, a: [[i64; n]; n]);
10 let mut ns = NetworkSimplex::<i64, i64>::new(n * 2);
11 for (i, a) in a.iter().enumerate() {
12 ns.add_supply(i, 1);
13 ns.add_demand(i + n, 1);
14 for (j, &a) in a.iter().enumerate() {
15 ns.add_edge(i, j + n, 0, 1, a);
16 }
17 }
18 let sol = ns.solve_minimize();
19 if let Some(sol) = sol {
20 iter_print!(writer, sol.cost);
21 let p = (0..n * n)
22 .filter(|&eid| sol.flows[eid] != 0)
23 .map(|eid| eid % n);
24 iter_print!(writer, @it p);
25 } else {
26 iter_print!(writer, "infeasible");
27 }
28}
More examples
crates/library_checker/src/graph/min_cost_b_flow.rs (line 10)
6pub fn min_cost_b_flow(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, m, b: [i64; n], edges: [(usize, usize, i64, i64, i128); m]);
10 let mut ns = NetworkSimplex::<i64, i128>::new(n);
11 for (i, b) in b.into_iter().enumerate() {
12 ns.add_demand_supply(i, b);
13 }
14 for (s, t, l, u, c) in edges {
15 ns.add_edge(s, t, l, u, c);
16 }
17 let sol = ns.solve_minimize();
18 if let Some(sol) = sol {
19 iter_print!(writer, sol.cost);
20 for i in 0..n {
21 iter_print!(writer, sol.potentials[i]);
22 }
23 for i in 0..m {
24 iter_print!(writer, sol.flows[i]);
25 }
26 } else {
27 iter_print!(writer, "infeasible");
28 }
29}
Sourcepub fn add_demand(&mut self, vid: usize, demand: F)
pub fn add_demand(&mut self, vid: usize, demand: F)
Add demand
Examples found in repository?
crates/library_checker/src/graph/assignment.rs (line 13)
6pub fn assignment(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, a: [[i64; n]; n]);
10 let mut ns = NetworkSimplex::<i64, i64>::new(n * 2);
11 for (i, a) in a.iter().enumerate() {
12 ns.add_supply(i, 1);
13 ns.add_demand(i + n, 1);
14 for (j, &a) in a.iter().enumerate() {
15 ns.add_edge(i, j + n, 0, 1, a);
16 }
17 }
18 let sol = ns.solve_minimize();
19 if let Some(sol) = sol {
20 iter_print!(writer, sol.cost);
21 let p = (0..n * n)
22 .filter(|&eid| sol.flows[eid] != 0)
23 .map(|eid| eid % n);
24 iter_print!(writer, @it p);
25 } else {
26 iter_print!(writer, "infeasible");
27 }
28}
Sourcepub fn add_supply(&mut self, vid: usize, supply: F)
pub fn add_supply(&mut self, vid: usize, supply: F)
Add supply
Examples found in repository?
crates/library_checker/src/graph/assignment.rs (line 12)
6pub fn assignment(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, a: [[i64; n]; n]);
10 let mut ns = NetworkSimplex::<i64, i64>::new(n * 2);
11 for (i, a) in a.iter().enumerate() {
12 ns.add_supply(i, 1);
13 ns.add_demand(i + n, 1);
14 for (j, &a) in a.iter().enumerate() {
15 ns.add_edge(i, j + n, 0, 1, a);
16 }
17 }
18 let sol = ns.solve_minimize();
19 if let Some(sol) = sol {
20 iter_print!(writer, sol.cost);
21 let p = (0..n * n)
22 .filter(|&eid| sol.flows[eid] != 0)
23 .map(|eid| eid % n);
24 iter_print!(writer, @it p);
25 } else {
26 iter_print!(writer, "infeasible");
27 }
28}
Sourcepub fn add_demand_supply(&mut self, vid: usize, ds: F)
pub fn add_demand_supply(&mut self, vid: usize, ds: F)
Add demand/supply (positive for supply, negative for demand)
Examples found in repository?
crates/library_checker/src/graph/min_cost_b_flow.rs (line 12)
6pub fn min_cost_b_flow(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, m, b: [i64; n], edges: [(usize, usize, i64, i64, i128); m]);
10 let mut ns = NetworkSimplex::<i64, i128>::new(n);
11 for (i, b) in b.into_iter().enumerate() {
12 ns.add_demand_supply(i, b);
13 }
14 for (s, t, l, u, c) in edges {
15 ns.add_edge(s, t, l, u, c);
16 }
17 let sol = ns.solve_minimize();
18 if let Some(sol) = sol {
19 iter_print!(writer, sol.cost);
20 for i in 0..n {
21 iter_print!(writer, sol.potentials[i]);
22 }
23 for i in 0..m {
24 iter_print!(writer, sol.flows[i]);
25 }
26 } else {
27 iter_print!(writer, "infeasible");
28 }
29}
Sourcepub fn add_edge(&mut self, from: usize, to: usize, lower: F, upper: F, cost: C)
pub fn add_edge(&mut self, from: usize, to: usize, lower: F, upper: F, cost: C)
Add edge with lower/upper capacity and cost
Examples found in repository?
crates/library_checker/src/graph/assignment.rs (line 15)
6pub fn assignment(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, a: [[i64; n]; n]);
10 let mut ns = NetworkSimplex::<i64, i64>::new(n * 2);
11 for (i, a) in a.iter().enumerate() {
12 ns.add_supply(i, 1);
13 ns.add_demand(i + n, 1);
14 for (j, &a) in a.iter().enumerate() {
15 ns.add_edge(i, j + n, 0, 1, a);
16 }
17 }
18 let sol = ns.solve_minimize();
19 if let Some(sol) = sol {
20 iter_print!(writer, sol.cost);
21 let p = (0..n * n)
22 .filter(|&eid| sol.flows[eid] != 0)
23 .map(|eid| eid % n);
24 iter_print!(writer, @it p);
25 } else {
26 iter_print!(writer, "infeasible");
27 }
28}
More examples
crates/library_checker/src/graph/min_cost_b_flow.rs (line 15)
6pub fn min_cost_b_flow(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, m, b: [i64; n], edges: [(usize, usize, i64, i64, i128); m]);
10 let mut ns = NetworkSimplex::<i64, i128>::new(n);
11 for (i, b) in b.into_iter().enumerate() {
12 ns.add_demand_supply(i, b);
13 }
14 for (s, t, l, u, c) in edges {
15 ns.add_edge(s, t, l, u, c);
16 }
17 let sol = ns.solve_minimize();
18 if let Some(sol) = sol {
19 iter_print!(writer, sol.cost);
20 for i in 0..n {
21 iter_print!(writer, sol.potentials[i]);
22 }
23 for i in 0..m {
24 iter_print!(writer, sol.flows[i]);
25 }
26 } else {
27 iter_print!(writer, "infeasible");
28 }
29}
pub fn set_bucket_size(&mut self, size: usize)
pub fn set_minor_limit(&mut self, limit: usize)
Sourcepub fn solve_minimize(self) -> Option<NetworkSimplexSolution<F, C>>
pub fn solve_minimize(self) -> Option<NetworkSimplexSolution<F, C>>
Examples found in repository?
crates/library_checker/src/graph/assignment.rs (line 18)
6pub fn assignment(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, a: [[i64; n]; n]);
10 let mut ns = NetworkSimplex::<i64, i64>::new(n * 2);
11 for (i, a) in a.iter().enumerate() {
12 ns.add_supply(i, 1);
13 ns.add_demand(i + n, 1);
14 for (j, &a) in a.iter().enumerate() {
15 ns.add_edge(i, j + n, 0, 1, a);
16 }
17 }
18 let sol = ns.solve_minimize();
19 if let Some(sol) = sol {
20 iter_print!(writer, sol.cost);
21 let p = (0..n * n)
22 .filter(|&eid| sol.flows[eid] != 0)
23 .map(|eid| eid % n);
24 iter_print!(writer, @it p);
25 } else {
26 iter_print!(writer, "infeasible");
27 }
28}
More examples
crates/library_checker/src/graph/min_cost_b_flow.rs (line 17)
6pub fn min_cost_b_flow(reader: impl Read, mut writer: impl Write) {
7 let s = read_all_unchecked(reader);
8 let mut scanner = Scanner::new(&s);
9 scan!(scanner, n, m, b: [i64; n], edges: [(usize, usize, i64, i64, i128); m]);
10 let mut ns = NetworkSimplex::<i64, i128>::new(n);
11 for (i, b) in b.into_iter().enumerate() {
12 ns.add_demand_supply(i, b);
13 }
14 for (s, t, l, u, c) in edges {
15 ns.add_edge(s, t, l, u, c);
16 }
17 let sol = ns.solve_minimize();
18 if let Some(sol) = sol {
19 iter_print!(writer, sol.cost);
20 for i in 0..n {
21 iter_print!(writer, sol.potentials[i]);
22 }
23 for i in 0..m {
24 iter_print!(writer, sol.flows[i]);
25 }
26 } else {
27 iter_print!(writer, "infeasible");
28 }
29}
Trait Implementations§
Source§impl<F: Clone, C: Clone> Clone for NetworkSimplex<F, C>
impl<F: Clone, C: Clone> Clone for NetworkSimplex<F, C>
Source§fn clone(&self) -> NetworkSimplex<F, C>
fn clone(&self) -> NetworkSimplex<F, C>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreAuto Trait Implementations§
impl<F, C> Freeze for NetworkSimplex<F, C>
impl<F, C> RefUnwindSafe for NetworkSimplex<F, C>where
F: RefUnwindSafe,
C: RefUnwindSafe,
impl<F, C> Send for NetworkSimplex<F, C>
impl<F, C> Sync for NetworkSimplex<F, C>
impl<F, C> Unpin for NetworkSimplex<F, C>
impl<F, C> UnwindSafe for NetworkSimplex<F, C>where
F: UnwindSafe,
C: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more