Problem p01317 (C++) — buggy submission, verdict: Time Limit Exceeded

#include <algorithm>
#include <bitset>
#include <cassert>
#include <cfloat>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
// #include <utility>
// #include <memory>
// #include <functional>
// #include <deque>
// #include <cctype>
// #include <ctime>
// #include <numeric>
// #include <list>
// #include <iomanip>

// #if __cplusplus >= 201103L
// #include <array>
// #include <tuple>
// #include <initializer_list>
// #include <forward_list>
//
// #define cauto const auto&
// #else

// #endif

using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

typedef vector<int> vint;
typedef vector<vector<int>> vvint;
typedef vector<long long> vll, vLL;
typedef vector<vector<long long>> vvll, vvLL;

#define VV(T) vector<vector<T>>

template <class T>
void initvv(vector<vector<T>> &v, int a, int b, const T &t = T()) {
  v.assign(a, vector<T>(b, t));
}

template <class F, class T> void convert(const F &f, T &t) {
  stringstream ss;
  ss << f;
  ss >> t;
}

#undef _P
#define _P(...) (void)printf(__VA_ARGS__)
#define reep(i, a, b) for (int i = (a); i < (b); ++i)
#define rep(i, n) reep((i), 0, (n))
#define ALL(v) (v).begin(), (v).end()
#define PB push_back
#define F first
#define S second
#define mkp make_pair
#define RALL(v) (v).rbegin(), (v).rend()
#define DEBUG
#ifdef DEBUG
#define dump(x) cout << #x << " = " << (x) << endl;
#define debug(x)                                                               \\
  cout << #x << " = " << (x) << " (L" << __LINE__ << ")"                       \\
       << " " << __FILE__ << endl;
#else
#define dump(x)
#define debug(x)
#endif
#define LDcout(x, n) fixed << setprecision(n) << x

#define MOD 1000000007LL
#define EPS 1e-8
#define INF 0x3f3f3f3f
#define INFL 0x1f3f3f3f3f3f3f3fLL
#define maxs(x, y) x = max(x, y)
#define mins(x, y) x = min(x, y)

void mainmain() {
  int n, m;
  while (cin >> n >> m, n) {
    vvll land;
    vvll sea;
    initvv(land, n, n, INFL);
    initvv(sea, n, n, INFL);
    rep(i, m) {
      int a, b;
      ll c;
      char t;
      cin >> a >> b >> c >> t;
      a--;
      b--;
      if (t == 'L')
        land[a][b] = mins(land[b][a], c);
      else
        sea[a][b] = mins(sea[b][a], c);
    }
    rep(j, n) land[j][j] = sea[j][j] = 0;
    rep(k, n) rep(i, n) rep(j, n) mins(land[i][j], land[i][k] + land[k][j]);
    rep(k, n) rep(i, n) rep(j, n) mins(sea[i][j], sea[i][k] + sea[k][j]);
    int r;
    cin >> r;
    vint v(r);
    rep(i, r) { cin >> v[i], v[i]--; }
    vll pre(n, INFL);
    pre[v[0]] = 0;
    rep(i, r - 1) {
      vll dp(n, INFL);
      rep(k, n) {
        mins(dp[k], pre[k] + land[v[i]][v[i + 1]]);
        rep(l, n) {
          mins(dp[l], pre[k] + land[v[i]][k] + sea[k][l] + land[l][v[i + 1]]);
        }
      }
      swap(dp, pre);
    }
    cout << *min_element(ALL(pre)) << endl;
  }
}

signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout << fixed << setprecision(20);
  mainmain();
}

Error: TLE

Fixed submission:

#include <algorithm>
#include <bitset>
#include <cassert>
#include <cfloat>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
// #include <utility>
// #include <memory>
// #include <functional>
// #include <deque>
// #include <cctype>
// #include <ctime>
// #include <numeric>
// #include <list>
// #include <iomanip>

// #if __cplusplus >= 201103L
// #include <array>
// #include <tuple>
// #include <initializer_list>
// #include <forward_list>
//
// #define cauto const auto&
// #else

// #endif

using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

typedef vector<int> vint;
typedef vector<vector<int>> vvint;
typedef vector<long long> vll, vLL;
typedef vector<vector<long long>> vvll, vvLL;

#define VV(T) vector<vector<T>>

template <class T>
void initvv(vector<vector<T>> &v, int a, int b, const T &t = T()) {
  v.assign(a, vector<T>(b, t));
}

template <class F, class T> void convert(const F &f, T &t) {
  stringstream ss;
  ss << f;
  ss >> t;
}

#undef _P
#define _P(...) (void)printf(__VA_ARGS__)
#define reep(i, a, b) for (int i = (a); i < (b); ++i)
#define rep(i, n) reep((i), 0, (n))
#define ALL(v) (v).begin(), (v).end()
#define PB push_back
#define F first
#define S second
#define mkp make_pair
#define RALL(v) (v).rbegin(), (v).rend()
#define DEBUG
#ifdef DEBUG
#define dump(x) cout << #x << " = " << (x) << endl;
#define debug(x)                                                               \\
  cout << #x << " = " << (x) << " (L" << __LINE__ << ")"                       \\
       << " " << __FILE__ << endl;
#else
#define dump(x)
#define debug(x)
#endif
#define LDcout(x, n) fixed << setprecision(n) << x

#define MOD 1000000007LL
#define EPS 1e-8
#define INF 0x3f3f3f3f
#define INFL 0x3f3f3f3f3f3f3f3fLL
#define maxs(x, y) x = max(x, y)
#define mins(x, y) x = min(x, y)
ll dp[210][210];
void mainmain() {
  int n, m;
  while (cin >> n >> m, n) {
    VV(pii) land(n);
    VV(pii) sea(n);
    rep(i, m) {
      int a, b, c;
      char t;
      cin >> a >> b >> c >> t;
      a--;
      b--;
      if (t == 'L') {
        land[a].PB(pii(b, c));
        land[b].PB(pii(a, c));
      } else {
        sea[a].PB(pii(b, c));
        sea[b].PB(pii(a, c));
      }
    }
    int r;
    cin >> r;
    vint dest(r);
    rep(i, r) cin >> dest[i], dest[i]--;
    rep(i, n) {
      rep(j, n) { dp[i][j] = -1; }
    }
    dp[dest[0]][dest[0]] = 0;
    reep(o, 1, r) {
      typedef pair<ll, pii> P;
      priority_queue<P> pq;
      rep(i, n) {
        if (dp[dest[o - 1]][i] >= 0) {
          pq.push(mkp(-dp[dest[o - 1]][i], pii(dest[o - 1], i)));
        }
      }
      rep(i, n) {
        rep(j, n) { dp[i][j] = -1; }
      }
      while (!pq.empty()) {
        P top = pq.top();
        pq.pop();
        if (dp[top.S.F][top.S.S] >= 0)
          continue;
        dp[top.S.F][top.S.S] = -top.F;
        // cout<<-top.F.F<<" "<<top.F.S<<" "<<top.S.F<<" "<<top.S.S<<endl;
        for (pii x : land[top.S.F]) {
          if (dp[x.F][top.S.S] == -1) {
            pq.push(mkp(top.F - x.S, pll(x.F, top.S.S)));
          }
        }
        if (top.S.F == top.S.S)
          for (pii x : sea[top.S.F]) {
            if (dp[x.F][x.F] == -1) {
              pq.push(mkp(top.F - x.S, pll(x.F, x.F)));
            }
          }
      }
    }
    ll ans = INFL;
    // dp[r-1][dest[r-1]]
    // cout<<r-1<<" "<<dest[r-1]<<endl;
    rep(i, n) {
      if (dp[dest[r - 1]][i] == -1)
        continue;
      mins(ans, dp[dest[r - 1]][i]);
      // cout<<dp[r-1][dest[r-1]][i]<<endl;
    }
    cout << ans << endl;
  }
}

signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout << fixed << setprecision(20);
  mainmain();
}