# HG changeset patch
# User Alpar Juttner <alpar@cs.elte.hu>
# Date 1298883487 -3600
# Node ID 79fab87ee483a4665e0092306fe7c3fb8fdcf310
# Parent  1861d5dcf3121bbef6c237910ab05e367c6dc977# Parent  30d5f950aa5f4347b3bef4e9ab7c01c3eb8f05c7
Merge bugfix #414 to branch 1.2

diff -r 1861d5dcf312 -r 79fab87ee483 lemon/preflow.h
--- a/lemon/preflow.h	Wed Sep 22 09:32:53 2010 +0200
+++ b/lemon/preflow.h	Mon Feb 28 09:58:07 2011 +0100
@@ -543,9 +543,6 @@
           if ((*_level)[u] == _level->maxLevel()) continue;
           _flow->set(e, (*_capacity)[e]);
           (*_excess)[u] += rem;
-          if (u != _target && !_level->active(u)) {
-            _level->activate(u);
-          }
         }
       }
       for (InArcIt e(_graph, _source); e != INVALID; ++e) {
@@ -555,11 +552,12 @@
           if ((*_level)[v] == _level->maxLevel()) continue;
           _flow->set(e, 0);
           (*_excess)[v] += rem;
-          if (v != _target && !_level->active(v)) {
-            _level->activate(v);
-          }
         }
       }
+      for (NodeIt n(_graph); n != INVALID; ++n) 
+        if(n!=_source && n!=_target && _tolerance.positive((*_excess)[n]))
+          _level->activate(n);
+          
       return true;
     }
 
diff -r 1861d5dcf312 -r 79fab87ee483 test/preflow_test.cc
--- a/test/preflow_test.cc	Wed Sep 22 09:32:53 2010 +0200
+++ b/test/preflow_test.cc	Mon Feb 28 09:58:07 2011 +0100
@@ -156,6 +156,30 @@
   return true;
 }
 
+void initFlowTest()
+{
+  DIGRAPH_TYPEDEFS(SmartDigraph);
+  
+  SmartDigraph g;
+  SmartDigraph::ArcMap<int> cap(g),iflow(g);
+  Node s=g.addNode(); Node t=g.addNode();
+  Node n1=g.addNode(); Node n2=g.addNode();
+  Arc a;
+  a=g.addArc(s,n1); cap[a]=20; iflow[a]=20;
+  a=g.addArc(n1,n2); cap[a]=10; iflow[a]=0;
+  a=g.addArc(n2,t); cap[a]=20; iflow[a]=0;
+
+  Preflow<SmartDigraph> pre(g,cap,s,t);
+  pre.init(iflow);
+  pre.startFirstPhase();
+  check(pre.flowValue() == 10, "The incorrect max flow value.");
+  check(pre.minCut(s), "Wrong min cut (Node s).");
+  check(pre.minCut(n1), "Wrong min cut (Node n1).");
+  check(!pre.minCut(n2), "Wrong min cut (Node n2).");
+  check(!pre.minCut(t), "Wrong min cut (Node t).");
+}
+
+
 int main() {
 
   typedef SmartDigraph Digraph;
@@ -246,5 +270,7 @@
   check(preflow_test.flowValue() == min_cut_value,
         "The max flow value or the three min cut values are incorrect.");
 
+  initFlowTest();
+  
   return 0;
 }