5 #include <lemon/graph_utils.h> |
5 #include <lemon/graph_utils.h> |
6 #include <lemon/smart_graph.h> |
6 #include <lemon/smart_graph.h> |
7 #include <lemon/list_graph.h> |
7 #include <lemon/list_graph.h> |
8 #include <lemon/dimacs.h> |
8 #include <lemon/dimacs.h> |
9 #include <lemon/time_measure.h> |
9 #include <lemon/time_measure.h> |
10 #include <lp_solver_base.h> |
10 #include <lp_solver_glpk.h> |
11 |
11 |
12 using std::cout; |
12 using std::cout; |
13 using std::endl; |
13 using std::endl; |
14 using namespace lemon; |
14 using namespace lemon; |
15 |
15 |
16 template<typename Edge, typename EdgeIndexMap> |
16 template<typename Edge, typename EdgeIndexMap> |
17 class PrimalMap { |
17 class PrimalMap { |
18 protected: |
18 protected: |
19 LPGLPK* lp; |
19 LpGlpk* lp; |
20 EdgeIndexMap* edge_index_map; |
20 EdgeIndexMap* edge_index_map; |
21 public: |
21 public: |
22 PrimalMap(LPGLPK& _lp, EdgeIndexMap& _edge_index_map) : |
22 PrimalMap(LpGlpk& _lp, EdgeIndexMap& _edge_index_map) : |
23 lp(&_lp), edge_index_map(&_edge_index_map) { } |
23 lp(&_lp), edge_index_map(&_edge_index_map) { } |
24 double operator[](Edge e) const { |
24 double operator[](Edge e) const { |
25 return lp->getPrimal((*edge_index_map)[e]); |
25 return lp->getPrimal((*edge_index_map)[e]); |
26 } |
26 } |
27 }; |
27 }; |
41 Node s, t; |
41 Node s, t; |
42 Graph::EdgeMap<int> cap(g); |
42 Graph::EdgeMap<int> cap(g); |
43 readDimacs(std::cin, g, cap, s, t); |
43 readDimacs(std::cin, g, cap, s, t); |
44 Timer ts; |
44 Timer ts; |
45 |
45 |
46 typedef LPGLPK LPSolver; |
46 typedef LpGlpk LPSolver; |
47 LPSolver lp; |
47 LPSolver lp; |
48 lp.setMaximize(); |
48 lp.setMaximize(); |
49 typedef LPSolver::Col Col; |
49 typedef LPSolver::Col Col; |
50 typedef LPSolver::Row Row; |
50 typedef LPSolver::Row Row; |
51 typedef Graph::EdgeMap<Col> EdgeIndexMap; |
51 typedef Graph::EdgeMap<Col> EdgeIndexMap; |