Problem p02868 (C++)

Buggy submission (status: Time Limit Exceeded):
#include <cctype>
#include <cfloat>
#include <climits>
#include <cmath>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>

#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <ios>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <valarray>
#include <vector>

#if __cplusplus >= 201103L
#include <array>
#include <forward_list>
#include <random>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <unordered_map>
#include <unordered_set>
#endif

#define F first
#define S second
#define MP make_pair
#define pb push_back
#define all(a) a.begin(), a.end()
#define lcm(a, b) (a) / __gcd((a), (b)) * (b)
#define endl '\n'

using namespace std;

typedef long long LL;
typedef pair<int, int> P;
typedef pair<LL, LL> LP;
typedef pair<int, P> iP;
typedef pair<P, P> PP;

static const int INF = INT_MAX;
static const LL LINF = LLONG_MAX;
static const int MIN = INT_MIN;
static const LL LMIN = LLONG_MIN;
static const int MOD = 1000000007;
static const int SIZE = 200005;

const int dx[] = {0, -1, 1, 0};
const int dy[] = {-1, 0, 0, 1};

vector<int> Div(int n) {
  vector<int> ret;
  for (int i = 1; i * i <= n; ++i) {
    if (n % i == 0) {
      ret.pb(i);

      if (i * i != n)
        ret.pb(n / i);
    }
  }
  sort(all(ret));
  return ret;
}

LL dijkstra();

vector<LP> graph[SIZE];
LL dist[SIZE];
int n, m;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);

  cin >> n >> m;
  for (int i = 0; i < m; ++i) {
    int l, r, c;
    cin >> l >> r >> c;
    graph[l].pb(MP(r, c));
    graph[r].pb(MP(l, c));
  }

  for (int i = 2; i <= n; ++i) {
    graph[i].pb(MP(i - 1, 0));
  }

  LL res = dijkstra();
  if (res == LINF)
    res = -1;
  cout << res << endl;

  return 0;
}

LL dijkstra() {
  priority_queue<LP, vector<LP>, greater<LP>> pq;
  pq.push(MP(1, 0));
  for (int i = 0; i < SIZE; ++i) {
    dist[i] = LINF;
  }

  while (!pq.empty()) {
    LP node = pq.top();
    pq.pop();

    if (node.F == n)
      continue;

    for (int i = 0; i < graph[node.F].size(); ++i) {
      LP p = graph[node.F][i];
      if (dist[p.F] > node.S + p.S) {
        dist[p.F] = node.S + p.S;
        pq.push(MP(p.F, dist[p.F]));
      }
    }
  }

  return dist[n];
}


Fixed submission:
#include <cctype>
#include <cfloat>
#include <climits>
#include <cmath>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>

#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <ios>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <valarray>
#include <vector>

#if __cplusplus >= 201103L
#include <array>
#include <forward_list>
#include <random>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <unordered_map>
#include <unordered_set>
#endif

#define F first
#define S second
#define MP make_pair
#define pb push_back
#define all(a) a.begin(), a.end()
#define lcm(a, b) (a) / __gcd((a), (b)) * (b)
#define endl '\n'

using namespace std;

typedef long long LL;
typedef pair<int, int> P;
typedef pair<LL, LL> LP;
typedef pair<int, P> iP;
typedef pair<P, P> PP;

static const int INF = INT_MAX;
static const LL LINF = LLONG_MAX;
static const int MIN = INT_MIN;
static const LL LMIN = LLONG_MIN;
static const int MOD = 1000000007;
static const int SIZE = 200005;

const int dx[] = {0, -1, 1, 0};
const int dy[] = {-1, 0, 0, 1};

vector<int> Div(int n) {
  vector<int> ret;
  for (int i = 1; i * i <= n; ++i) {
    if (n % i == 0) {
      ret.pb(i);

      if (i * i != n)
        ret.pb(n / i);
    }
  }
  sort(all(ret));
  return ret;
}

LL dijkstra();

vector<LP> graph[SIZE];
LL dist[SIZE];
int n, m;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);

  cin >> n >> m;
  for (int i = 0; i < m; ++i) {
    int l, r, c;
    cin >> l >> r >> c;
    graph[l].pb(MP(r, c));
  }

  for (int i = 2; i <= n; ++i) {
    graph[i].pb(MP(i - 1, 0));
  }

  LL res = dijkstra();
  if (res == LINF)
    res = -1;
  cout << res << endl;

  return 0;
}

LL dijkstra() {
  priority_queue<LP, vector<LP>, greater<LP>> pq;
  pq.push(MP(1, 0));
  for (int i = 0; i < SIZE; ++i) {
    dist[i] = LINF;
  }

  while (!pq.empty()) {
    LP node = pq.top();
    pq.pop();

    if (node.F == n)
      continue;

    for (int i = 0; i < graph[node.F].size(); ++i) {
      LP p = graph[node.F][i];
      if (dist[p.F] > node.S + p.S) {
        dist[p.F] = node.S + p.S;
        pq.push(MP(p.F, dist[p.F]));
      }
    }
  }

  return dist[n];
}