Use 'long long' flow cost in dimacs-solver.cc (#347)
authorPeter Kovacs <kpeter@inf.elte.hu>
Sat, 20 Feb 2010 16:51:43 +0100
changeset 8469d380bf27194
parent 836 c841ae1aca29
child 847 754272f20318
Use 'long long' flow cost in dimacs-solver.cc (#347)
tools/dimacs-solver.cc
     1.1 --- a/tools/dimacs-solver.cc	Wed Feb 17 23:10:36 2010 +0100
     1.2 +++ b/tools/dimacs-solver.cc	Sat Feb 20 16:51:43 2010 +0100
     1.3 @@ -91,7 +91,7 @@
     1.4    if(report) std::cerr << "\nMax flow value: " << pre.flowValue() << '\n';  
     1.5  }
     1.6  
     1.7 -template<class Value>
     1.8 +template<class Value, class LargeValue>
     1.9  void solve_min(ArgParser &ap, std::istream &is, std::ostream &,
    1.10                 Value infty, DimacsDescriptor &desc)
    1.11  {
    1.12 @@ -127,7 +127,8 @@
    1.13    if (report) {
    1.14      std::cerr << "Run NetworkSimplex: " << ti << "\n\n";
    1.15      std::cerr << "Feasible flow: " << (res ? "found" : "not found") << '\n';
    1.16 -    if (res) std::cerr << "Min flow cost: " << ns.totalCost() << '\n';
    1.17 +    if (res) std::cerr << "Min flow cost: "
    1.18 +                       << ns.template totalCost<LargeValue>() << '\n';
    1.19    }
    1.20  }
    1.21  
    1.22 @@ -151,7 +152,7 @@
    1.23  }
    1.24  
    1.25  
    1.26 -template<class Value>
    1.27 +template<class Value, class LargeValue>
    1.28  void solve(ArgParser &ap, std::istream &is, std::ostream &os,
    1.29             DimacsDescriptor &desc)
    1.30  {
    1.31 @@ -169,7 +170,7 @@
    1.32    switch(desc.type)
    1.33      {
    1.34      case DimacsDescriptor::MIN:
    1.35 -      solve_min<Value>(ap,is,os,infty,desc);
    1.36 +      solve_min<Value, LargeValue>(ap,is,os,infty,desc);
    1.37        break;
    1.38      case DimacsDescriptor::MAX:
    1.39        solve_max<Value>(ap,is,os,infty,desc);
    1.40 @@ -264,14 +265,16 @@
    1.41      }
    1.42      
    1.43    if(ap.given("double"))
    1.44 -    solve<double>(ap,is,os,desc);
    1.45 +    solve<double, double>(ap,is,os,desc);
    1.46    else if(ap.given("ldouble"))
    1.47 -    solve<long double>(ap,is,os,desc);
    1.48 +    solve<long double, long double>(ap,is,os,desc);
    1.49  #ifdef LEMON_HAVE_LONG_LONG
    1.50    else if(ap.given("long"))
    1.51 -    solve<long long>(ap,is,os,desc);
    1.52 +    solve<long long, long long>(ap,is,os,desc);
    1.53 +  else solve<int, long long>(ap,is,os,desc);
    1.54 +#else
    1.55 +  else solve<int, long>(ap,is,os,desc);
    1.56  #endif
    1.57 -  else solve<int>(ap,is,os,desc);
    1.58  
    1.59    return 0;
    1.60  }