Problem p03449 (C++)

Buggy submission (status: Runtime Error):
#include <algorithm>
#include <cmath>
#include <fstream>
#include <iostream>
#include <map>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <stack>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <vector>

using namespace std;

#define INT_MAX_VALUE 2147483647
#define LONG_LONG_MAX_VALUE 9223372036854775807
#define ll long long

template <class T> T mymax(T a, T b) {
  if (a >= b)
    return a;
  return b;
}
template <class T> T mymin(T a, T b) {
  if (a <= b)
    return a;
  return b;
}

ll gcd(ll a, ll b) {
  if (a < b) {
    swap(a, b);
  }
  while (b) {
    ll r = a % b;
    a = b;
    b = r;
  }
  return a;
}

ll lcm(ll a, ll b) { return (a * b) / gcd(a, b); }

struct XX {
  int a;
  int b;
  int z;
  int i;
};

class xxGreater {
public:
  bool operator()(const XX &riLeft, const XX &riRight) const {
    // 第2条件
    if ((riLeft.b) == (riRight.b)) {
      return riLeft.i <
             riRight.i; //<:昇順(小さいものから順番)、>:降順(大きいものから順番)
      // プライオリティキューの場合は > で、top()すると値の小さいものがとれる
    }
    // 第1条件
    return (riLeft.b) > (riRight.b);
  }
};

// map<long long,long long> prime_f(long long n){
//     map<long long,long long>res;
//     for(int i=2;i*i<=n;i++){
//         while(n%i==0){
//             ++res[i];
//             n/=i;
//         }
//     }
//     if(n!=1)res[n]=1;
//     return res;
// }

struct edge {
  int to;
  int cost;
};
typedef pair<int, int> P; // first:最短距離、second:頂点番号
vector<edge> G[200];      // G[各頂点番号]
int d[200];

void dijkstra(int s, int V) { // V:頂点数
  priority_queue<P, vector<P>, greater<P>> que;
  fill(d, d + V + 1, INT_MAX_VALUE);
  d[s] = 0;
  que.push(P(0, s));

  while (!que.empty()) {
    P p = que.top();
    que.pop();
    int v = p.second;
    if (d[v] < p.first) {
      continue;
    }
    for (int i = 0; i < G[v].size(); i++) {
      edge e = G[v][i];
      if (d[e.to] > d[v] + e.cost) {
        d[e.to] = d[v] + e.cost;
        que.push(P(d[e.to], e.to));
      }
    }
  }
}

int main(int argc, const char *argv[]) {
  // std::ios::sync_with_stdio(false);
  // scanf("%s",S);
  // scanf("%d",&N);
  // sscanf(tmp.c_str(),"%dd%d%d",&time[i], &dice[i], &z[i]);
  // getline(cin, target);
  // cin >> x >> y;
  // テスト用
  // ifstream ifs( "1_06.txt" );
  // ifs >> a;
  // ここから

  // 入力高速化
  ios::sync_with_stdio(false);
  cin.tie(0);

  int N;
  cin >> N;
  edge e;

  for (int i = 0; i < N; i++) {
    int tmp;
    cin >> tmp;
    e.to = i + 1;
    e.cost = 100 - tmp;
    G[i].push_back(e);

    e.to = i + (N + 1);
    e.cost = 100 - tmp;
    G[i].push_back(e);
  }
  for (int i = 0; i < N; i++) {
    int tmp;
    cin >> tmp;
    e.to = i + 1 + (N + 1);
    e.cost = 100 - tmp;
    G[i + (N + 1)].push_back(e);
  }

  dijkstra(0, (N + 1) * 2);
  cout << 100 * (N + 1) - d[2 * (N + 1) - 1] << endl;

  // ここまで
  // cout << "debug" << endl;
  // cout << "ans" << endl;改行含む
  // printf("%.0f\n",ans);//小数点以下表示なし
  // printf("%.7f\n",p);
  // printf("%f\n",pow(2,ans.size()));

  return 0;
}


Fixed submission:
#include <algorithm>
#include <cmath>
#include <fstream>
#include <iostream>
#include <map>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <stack>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <vector>

using namespace std;

#define INT_MAX_VALUE 2147483647
#define LONG_LONG_MAX_VALUE 9223372036854775807
#define ll long long

template <class T> T mymax(T a, T b) {
  if (a >= b)
    return a;
  return b;
}
template <class T> T mymin(T a, T b) {
  if (a <= b)
    return a;
  return b;
}

ll gcd(ll a, ll b) {
  if (a < b) {
    swap(a, b);
  }
  while (b) {
    ll r = a % b;
    a = b;
    b = r;
  }
  return a;
}

ll lcm(ll a, ll b) { return (a * b) / gcd(a, b); }

struct XX {
  int a;
  int b;
  int z;
  int i;
};

class xxGreater {
public:
  bool operator()(const XX &riLeft, const XX &riRight) const {
    // 第2条件
    if ((riLeft.b) == (riRight.b)) {
      return riLeft.i <
             riRight.i; //<:昇順(小さいものから順番)、>:降順(大きいものから順番)
      // プライオリティキューの場合は > で、top()すると値の小さいものがとれる
    }
    // 第1条件
    return (riLeft.b) > (riRight.b);
  }
};

// map<long long,long long> prime_f(long long n){
//     map<long long,long long>res;
//     for(int i=2;i*i<=n;i++){
//         while(n%i==0){
//             ++res[i];
//             n/=i;
//         }
//     }
//     if(n!=1)res[n]=1;
//     return res;
// }

struct edge {
  int to;
  int cost;
};
typedef pair<int, int> P; // first:最短距離、second:頂点番号
vector<edge> G[400];      // G[各頂点番号]
int d[400];

void dijkstra(int s, int V) { // V:頂点数
  priority_queue<P, vector<P>, greater<P>> que;
  fill(d, d + V + 1, INT_MAX_VALUE);
  d[s] = 0;
  que.push(P(0, s));

  while (!que.empty()) {
    P p = que.top();
    que.pop();
    int v = p.second;
    if (d[v] < p.first) {
      continue;
    }
    for (int i = 0; i < G[v].size(); i++) {
      edge e = G[v][i];
      if (d[e.to] > d[v] + e.cost) {
        d[e.to] = d[v] + e.cost;
        que.push(P(d[e.to], e.to));
      }
    }
  }
}

int main(int argc, const char *argv[]) {
  // std::ios::sync_with_stdio(false);
  // scanf("%s",S);
  // scanf("%d",&N);
  // sscanf(tmp.c_str(),"%dd%d%d",&time[i], &dice[i], &z[i]);
  // getline(cin, target);
  // cin >> x >> y;
  // テスト用
  // ifstream ifs( "1_06.txt" );
  // ifs >> a;
  // ここから

  // 入力高速化
  ios::sync_with_stdio(false);
  cin.tie(0);

  int N;
  cin >> N;
  edge e;

  for (int i = 0; i < N; i++) {
    int tmp;
    cin >> tmp;
    e.to = i + 1;
    e.cost = 100 - tmp;
    G[i].push_back(e);

    e.to = i + (N + 1);
    e.cost = 100 - tmp;
    G[i].push_back(e);
  }
  for (int i = 0; i < N; i++) {
    int tmp;
    cin >> tmp;
    e.to = i + 1 + (N + 1);
    e.cost = 100 - tmp;
    G[i + (N + 1)].push_back(e);
  }

  dijkstra(0, (N + 1) * 2);
  cout << 100 * (N + 1) - d[2 * (N + 1) - 1] << endl;

  // ここまで
  // cout << "debug" << endl;
  // cout << "ans" << endl;改行含む
  // printf("%.0f\n",ans);//小数点以下表示なし
  // printf("%.7f\n",p);
  // printf("%f\n",pow(2,ans.size()));

  return 0;
}