diff --git a/atcoder/mincostflow.hpp b/atcoder/mincostflow.hpp
index 321f3e1..1db2f9e 100644
--- a/atcoder/mincostflow.hpp
+++ b/atcoder/mincostflow.hpp
@@ -122,7 +122,7 @@ template <class Cap, class Cost> struct mcf_graph {
             return true;
         };
         Cap flow = 0;
-        Cost cost = 0, prev_cost = -1;
+        Cost cost = 0, prev_cost_per_flow = -1;
         std::vector<std::pair<Cap, Cost>> result;
         result.push_back({flow, cost});
         while (flow < flow_limit) {
@@ -139,11 +139,11 @@ template <class Cap, class Cost> struct mcf_graph {
             Cost d = -dual[s];
             flow += c;
             cost += c * d;
-            if (prev_cost == d) {
+            if (prev_cost_per_flow == d) {
                 result.pop_back();
             }
             result.push_back({flow, cost});
-            prev_cost = cost;
+            prev_cost_per_flow = d;
         }
         return result;
     }
diff --git a/test/unittest/mincostflow_test.cpp b/test/unittest/mincostflow_test.cpp
index baec43f..cd8dcbd 100644
--- a/test/unittest/mincostflow_test.cpp
+++ b/test/unittest/mincostflow_test.cpp
@@ -79,3 +79,12 @@ TEST(MaxflowTest, SelfLoop) {
     mcf_graph<int, int>::edge e = {0, 0, 100, 0, 123};
     edge_eq(e, g.get_edge(0));
 }
+
+TEST(MincostflowTest, SameCostPaths) {
+    mcf_graph<int, int> g(3);
+    ASSERT_EQ(0, g.add_edge(0, 1, 1, 1));
+    ASSERT_EQ(1, g.add_edge(1, 2, 1, 0));
+    ASSERT_EQ(2, g.add_edge(0, 2, 2, 1));
+    auto expected = std::vector<std::pair<int, int>>{{0, 0}, {3, 3}};
+    ASSERT_EQ(expected, g.slope(0, 2));
+}
\ No newline at end of file