forked from NASU41/AtCoderLibraryForJava
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMinCostFlowTest.java
More file actions
72 lines (64 loc) · 2.3 KB
/
MinCostFlowTest.java
File metadata and controls
72 lines (64 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import static org.junit.Assert.assertEquals;
import java.util.LinkedList;
import org.junit.Test;
public class MinCostFlowTest {
@Test
public void simple() {
MinCostFlow g = new MinCostFlow(4);
g.addEdge(0, 1, 1, 1);
g.addEdge(0, 2, 1, 1);
g.addEdge(1, 3, 1, 1);
g.addEdge(2, 3, 1, 1);
g.addEdge(1, 2, 1, 1);
LinkedList<MinCostFlow.FlowAndCost> expect = new LinkedList<>();
expect.add(new MinCostFlow.FlowAndCost(0, 0));
expect.add(new MinCostFlow.FlowAndCost(2, 4));
assertEquals(expect, g.minCostSlope(0, 3, 10));
MinCostFlow.WeightedCapEdge e;
e = new MinCostFlow.WeightedCapEdge(0, 1, 1, 1, 1);
assertEquals(e, g.getEdge(0));
e = new MinCostFlow.WeightedCapEdge(0, 2, 1, 1, 1);
assertEquals(e, g.getEdge(1));
e = new MinCostFlow.WeightedCapEdge(1, 3, 1, 1, 1);
assertEquals(e, g.getEdge(2));
e = new MinCostFlow.WeightedCapEdge(2, 3, 1, 1, 1);
assertEquals(e, g.getEdge(3));
e = new MinCostFlow.WeightedCapEdge(1, 2, 1, 0, 1);
assertEquals(e, g.getEdge(4));
}
@Test
public void usage() {
{
MinCostFlow g = new MinCostFlow(2);
g.addEdge(0, 1, 1, 2);
assertEquals(new MinCostFlow.FlowAndCost(1, 2), g.minCostMaxFlow(0, 1));
}
{
MinCostFlow g = new MinCostFlow(2);
g.addEdge(0, 1, 1, 2);
LinkedList<MinCostFlow.FlowAndCost> expect = new LinkedList<>();
expect.add(new MinCostFlow.FlowAndCost(0, 0));
expect.add(new MinCostFlow.FlowAndCost(1, 2));
assertEquals(expect, g.minCostSlope(0, 1));
}
}
@Test
public void outOfRange() {
MinCostFlow g = new MinCostFlow(10);
try {
g.minCostSlope(-1, 3);
throw new AssertionError();
} catch (Exception e) {}
try {
g.minCostSlope(3, 3);
throw new AssertionError();
} catch (Exception e) {}
}
@Test
public void selfLoop() {
MinCostFlow g = new MinCostFlow(3);
assertEquals(0, g.addEdge(0, 0, 100, 123));
MinCostFlow.WeightedCapEdge e = new MinCostFlow.WeightedCapEdge(0, 0, 100, 0, 123);
assertEquals(e, g.getEdge(0));
}
}