# HG changeset patch
# User Peter Kovacs <kpeter@inf.elte.hu>
# Date 1266681103 -3600
# Node ID 9d380bf271941ce00c6f0edb200f9a81a71959a5
# Parent c841ae1aca299b7274d51c506871c57b73f1311a
Use 'long long' flow cost in dimacs-solver.cc (#347)
diff --git a/tools/dimacs-solver.cc b/tools/dimacs-solver.cc
|
a
|
b
|
|
| 91 | 91 | if(report) std::cerr << "\nMax flow value: " << pre.flowValue() << '\n'; |
| 92 | 92 | } |
| 93 | 93 | |
| 94 | | template<class Value> |
| | 94 | template<class Value, class LargeValue> |
| 95 | 95 | void solve_min(ArgParser &ap, std::istream &is, std::ostream &, |
| 96 | 96 | Value infty, DimacsDescriptor &desc) |
| 97 | 97 | { |
| … |
… |
|
| 127 | 127 | if (report) { |
| 128 | 128 | std::cerr << "Run NetworkSimplex: " << ti << "\n\n"; |
| 129 | 129 | std::cerr << "Feasible flow: " << (res ? "found" : "not found") << '\n'; |
| 130 | | if (res) std::cerr << "Min flow cost: " << ns.totalCost() << '\n'; |
| | 130 | if (res) std::cerr << "Min flow cost: " |
| | 131 | << ns.template totalCost<LargeValue>() << '\n'; |
| 131 | 132 | } |
| 132 | 133 | } |
| 133 | 134 | |
| … |
… |
|
| 151 | 152 | } |
| 152 | 153 | |
| 153 | 154 | |
| 154 | | template<class Value> |
| | 155 | template<class Value, class LargeValue> |
| 155 | 156 | void solve(ArgParser &ap, std::istream &is, std::ostream &os, |
| 156 | 157 | DimacsDescriptor &desc) |
| 157 | 158 | { |
| … |
… |
|
| 169 | 170 | switch(desc.type) |
| 170 | 171 | { |
| 171 | 172 | case DimacsDescriptor::MIN: |
| 172 | | solve_min<Value>(ap,is,os,infty,desc); |
| | 173 | solve_min<Value, LargeValue>(ap,is,os,infty,desc); |
| 173 | 174 | break; |
| 174 | 175 | case DimacsDescriptor::MAX: |
| 175 | 176 | solve_max<Value>(ap,is,os,infty,desc); |
| … |
… |
|
| 264 | 265 | } |
| 265 | 266 | |
| 266 | 267 | if(ap.given("double")) |
| 267 | | solve<double>(ap,is,os,desc); |
| | 268 | solve<double, double>(ap,is,os,desc); |
| 268 | 269 | else if(ap.given("ldouble")) |
| 269 | | solve<long double>(ap,is,os,desc); |
| | 270 | solve<long double, long double>(ap,is,os,desc); |
| 270 | 271 | #ifdef LEMON_HAVE_LONG_LONG |
| 271 | 272 | else if(ap.given("long")) |
| 272 | | solve<long long>(ap,is,os,desc); |
| | 273 | solve<long long, long long>(ap,is,os,desc); |
| | 274 | else solve<int, long long>(ap,is,os,desc); |
| | 275 | #else |
| | 276 | else solve<int, long>(ap,is,os,desc); |
| 273 | 277 | #endif |
| 274 | | else solve<int>(ap,is,os,desc); |
| 275 | 278 | |
| 276 | 279 | return 0; |
| 277 | 280 | } |