**Input: **graph , sink |

**Output: **subproblem set |

(1) **return** if is a tree; |

(2) let be the minimum directed cycle found by the DICIRCUIT algorithm in [13]; |

(3) **if ** **then **// no cycle |

(4)find any vertex with out degree larger than 1, and |

insert its out edges into ; |

(5) ; |

(6) **foreach ** **do** |

(7); |

(8)reverse the direction of edges in , and perform a breadth-first search from the sink; |

(9)**if** *all vertices are visited ***then** |

(10); |

(11)construct subproblem with as the network; |

(12) **if** **then** |

(13) graph of subproblem ; |

(14)**return** ; |

(15) **else** |

(16)**return** ; |