I implemented first phase of the highest label push relabel algorithm for maximum flow but I could not find any resources about how to implement the second phase, i.e. to convert the preflow push network to a valid flow network.
How To Convert A Pre-Flow Push Network With Excess Flow To A Flow Network
491 views Asked by Corei13 At
1
There are 1 answers
Related Questions in ALGORITHM
- Set log4j.properties for GWT
- Compound classes stored in an array are not accessible in selenium java
- Eclipse color highlighting broken
- Eclipse Luna with Nodeclipse hangs when navigating a .js file with the Outline view
- Java Heap Space error on Layout xml: GC overhead limit exceeded
- Eclipse, how to find how many attributes defined in a class?
- Eclipse and Windows Headers
- Eclipse find source file from library
- mingw-64 conflicting declarations when cross-compiling
- String.split() not behaving in android
Related Questions in MAX-FLOW
- Set log4j.properties for GWT
- Compound classes stored in an array are not accessible in selenium java
- Eclipse color highlighting broken
- Eclipse Luna with Nodeclipse hangs when navigating a .js file with the Outline view
- Java Heap Space error on Layout xml: GC overhead limit exceeded
- Eclipse, how to find how many attributes defined in a class?
- Eclipse and Windows Headers
- Eclipse find source file from library
- mingw-64 conflicting declarations when cross-compiling
- String.split() not behaving in android
Related Questions in PUSH-RELABEL
- Set log4j.properties for GWT
- Compound classes stored in an array are not accessible in selenium java
- Eclipse color highlighting broken
- Eclipse Luna with Nodeclipse hangs when navigating a .js file with the Outline view
- Java Heap Space error on Layout xml: GC overhead limit exceeded
- Eclipse, how to find how many attributes defined in a class?
- Eclipse and Windows Headers
- Eclipse find source file from library
- mingw-64 conflicting declarations when cross-compiling
- String.split() not behaving in android
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Popular Tags
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
If you really need the max flow (it's possible to derive a min cut directly from the preflow and use it to verify the preflow), then I know of two approaches.
The first approach is covered in the original Goldberg--Tarjan paper on the push relabel algorithm. In essence, the second phase is implemented almost exactly as the first. The only difference is that the source is held at distance n (instead of the sink, at distance 0). This has the effect of routing the excesses back to the source.
I'm not sure where the second approach is described. I know that it's in Goldberg's implementation, on which the Boost Graph implementation is based (see
convert_preflow_to_flow
). Conceptually, there are three steps.Until the preflow is acyclic, cancel a flow cycle by sending enough flow on the reverse cycle to remove one of the arcs from the flow graph.
Topologically sort the nodes of the flow graph from sinkmost to sourcemost.
For each node in topological order, eliminate its excess by decreasing the flow on incoming arcs (which effects a corresponding increase in the excess of nodes yet to be processed).
Practically speaking, Steps 1 and 2 both involve depth-first searches. Naively, one would restart the depth-first search for cycle-detection after each cycle is detected and canceled, but it's possible to rewind the depth-first search just to the point where it first used an arc that canceling removed, saving the time to get to that point in the search again. The topological order can be obtained as a byproduct of the search, saving a separate traversal for Step 2.