Problem p03305 (C++)

Buggy submission (status: Time Limit Exceeded):
#define _USE_MATH_DEFINES
#define _CRT_SECURE_NO_WARNINGS

#include <bits/stdc++.h>

#include <unordered_set>

using namespace std;

#define dprint(Exp, ...)                                                       \
  if (Exp) {                                                                   \
    fprintf(stderr, __VA_ARGS__);                                              \
  }
#define printe(...) fprintf(stderr, __VA_ARGS__);
#define PrtExp(_Exp) cerr << #_Exp << " = " << (_Exp)
#define PrtExpN(_Exp) cerr << #_Exp << " = " << (_Exp) << "\n"

#define SINT(n) scanf("%d", &n)
#define SINT2(n, m) scanf("%d %d", &n, &m)
#define SINT3(n, m, o) scanf("%d %d %d", &n, &m, &o)
#define SINT4(n, m, o, p) scanf("%d %d %d %d", &n, &m, &o, &p)
#define SINT5(n, m, o, p, q) scanf("%d %d %d %d %d", &n, &m, &o, &p, &q)
#define SLL(n) scanf("%lld", &n)
#define SLL2(n, m) scanf("%lld %lld", &n, &m)
#define SLL3(n, m, o) scanf("%lld %lld %lld", &n, &m, &o)
#define SST(s) scanf("%s", s)
#define SCH(c) scanf("%c", &c)

#define GC() getchar()

#define PINT(n) printf("%d", (int)(n))
#define PINT2(n, m) printf("%d %d", (int)(n), (int)(m))
#define PINT3(n, m, l) printf("%d %d %d", (int)(n), (int)(m), (int)(l))
#define PLL(n) printf("%lld", (long long)(n))
#define PST(s) printf("%s", (s))
#define PCH(s) printf("%c", (s))

#define PINTN(n) printf("%d\n", (int)(n))
#define PINT2N(n, m) printf("%d %d\n", (int)(n), (int)(m))
#define PINT3N(n, m, l) printf("%d %d %d\n", (int)(n), (int)(m), (int)(l))
#define PLLN(n) printf("%lld\n", (long long)(n))
#define PSTN(s) printf("%s\n", (s))
#define PCHN(s) printf("%c\n", (s))

#define PSP() printf(" ")
#define PN() printf("\n")

#define PC(c) putchar(c)
#define CSP (' ')
#define SN ("\n")

#define rep(i, a) for (int i = 0; i < a; i++)
#define reP(i, a) for (int i = 0; i <= a; i++)
#define Rep(i, a) for (int i = a - 1; i >= 0; i--)
#define ReP(i, a) for (int i = a; i >= 0; i--)

#define rEp(i, a) for (i = 0; i < a; i++)
#define rEP(i, a) for (i = 0; i <= a; i++)
#define REp(i, a) for (i = a - 1; i >= 0; i--)
#define REP(i, a) for (i = a; i >= 0; i--)

#define repft(i, a, b) for (int i = a; i < b; i++)
#define repfT(i, a, b) for (int i = a; i <= b; i++)
#define Repft(i, a, b) for (int i = a - 1; i >= b; i--)
#define RepfT(i, a, b) for (int i = a; i >= b; i--)

#define foreach(a, it) for (auto it = a.begin(); it != a.end(); ++it)

#define FILL(a, v) fill(begin(a), end(a), v)
#define FILL0(a) memset(a, 0, sizeof(a))
#define FILL1(a) memset(a, -1, sizeof(a))

typedef long long ll;

typedef unsigned long long ull;
typedef pair<int, int> Pi;
typedef pair<ll, ll> Pll;

const int INF = 1000000009;
const ll INFLL = 0x1f1f1f1f1f1f1f1fLL; // 2,242,545,357,980,376,863

template <class A, class B>
inline ostream &operator<<(ostream &st, const pair<A, B> &P) {
  return st << "(" << P.first << "," << P.second << ")";
};
template <class A, class B>
inline pair<A, B> operator+(const pair<A, B> &P, const pair<A, B> &Q) {
  return pair<A, B>(P.first + Q.first, P.second + Q.second);
};
template <class A, class B>
inline pair<A, B> operator-(const pair<A, B> &P, const pair<A, B> &Q) {
  return pair<A, B>(P.first - Q.first, P.second - Q.second);
};

#define fs first
#define sc second

vector<Pll> ga[100005];
vector<Pll> gb[100005];

ll A[100005];
ll B[100005];

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

  ll n, m, s, t;
  cin >> n >> m >> s >> t;
  --s;
  --t;
  rep(i, m) {
    ll x, y, a, b;
    cin >> x >> y >> a >> b;
    --x;
    --y;
    ga[x].emplace_back(y, a);
    ga[y].emplace_back(x, a);
    gb[x].emplace_back(y, b);
    gb[y].emplace_back(x, b);
  }
  rep(i, 100005) A[i] = B[i] = INFLL;
  A[s] = 0;
  B[t] = 0;
  priority_queue<Pll> Q;
  Q.push({0, s});
  while (!Q.empty()) {
    ll d = Q.top().fs;
    ll x = Q.top().sc;
    Q.pop();
    if (A[x] < d)
      continue;
    for (auto &p : ga[x]) {
      ll D = d + p.sc;
      if (A[p.fs] <= D)
        continue;
      A[p.fs] = D;
      Q.push({D, p.fs});
    }
  }
  Q.push({0, t});
  while (!Q.empty()) {
    ll d = Q.top().fs;
    ll x = Q.top().sc;
    Q.pop();
    if (B[x] < d)
      continue;
    for (auto &p : gb[x]) {
      ll D = d + p.sc;
      if (B[p.fs] <= D)
        continue;
      B[p.fs] = D;
      Q.push({D, p.fs});
    }
  }
  vector<Pll> r(n);
  rep(i, n) r[i] = {A[i] + B[i], i};
  sort(r.begin(), r.end());
  // for (auto&p : r) cout << "$ " << p << endl;

  int z = 0;
  rep(i, n) {
    for (;;) {
      if (r[z].sc >= i)
        break;
      ++z;
    }
    cout << 1000000000000000LL - r[z].fs << endl;
  }
  return 0;
}

/*
999999574976994
999999574976994
999999574976994
999999574976994
999999574976994
999999574976994
999999574976994
999999574976994

999999574976994
999999574976994
999999574976994
999999574976994
999999574976994
999999574976994
999999574976994
999999574976994
*/

Fixed submission:
#define _USE_MATH_DEFINES
#define _CRT_SECURE_NO_WARNINGS

#include <bits/stdc++.h>

#include <unordered_set>

using namespace std;

#define dprint(Exp, ...)                                                       \
  if (Exp) {                                                                   \
    fprintf(stderr, __VA_ARGS__);                                              \
  }
#define printe(...) fprintf(stderr, __VA_ARGS__);
#define PrtExp(_Exp) cerr << #_Exp << " = " << (_Exp)
#define PrtExpN(_Exp) cerr << #_Exp << " = " << (_Exp) << "\n"

#define SINT(n) scanf("%d", &n)
#define SINT2(n, m) scanf("%d %d", &n, &m)
#define SINT3(n, m, o) scanf("%d %d %d", &n, &m, &o)
#define SINT4(n, m, o, p) scanf("%d %d %d %d", &n, &m, &o, &p)
#define SINT5(n, m, o, p, q) scanf("%d %d %d %d %d", &n, &m, &o, &p, &q)
#define SLL(n) scanf("%lld", &n)
#define SLL2(n, m) scanf("%lld %lld", &n, &m)
#define SLL3(n, m, o) scanf("%lld %lld %lld", &n, &m, &o)
#define SST(s) scanf("%s", s)
#define SCH(c) scanf("%c", &c)

#define GC() getchar()

#define PINT(n) printf("%d", (int)(n))
#define PINT2(n, m) printf("%d %d", (int)(n), (int)(m))
#define PINT3(n, m, l) printf("%d %d %d", (int)(n), (int)(m), (int)(l))
#define PLL(n) printf("%lld", (long long)(n))
#define PST(s) printf("%s", (s))
#define PCH(s) printf("%c", (s))

#define PINTN(n) printf("%d\n", (int)(n))
#define PINT2N(n, m) printf("%d %d\n", (int)(n), (int)(m))
#define PINT3N(n, m, l) printf("%d %d %d\n", (int)(n), (int)(m), (int)(l))
#define PLLN(n) printf("%lld\n", (long long)(n))
#define PSTN(s) printf("%s\n", (s))
#define PCHN(s) printf("%c\n", (s))

#define PSP() printf(" ")
#define PN() printf("\n")

#define PC(c) putchar(c)
#define CSP (' ')
#define SN ("\n")

#define rep(i, a) for (int i = 0; i < a; i++)
#define reP(i, a) for (int i = 0; i <= a; i++)
#define Rep(i, a) for (int i = a - 1; i >= 0; i--)
#define ReP(i, a) for (int i = a; i >= 0; i--)

#define rEp(i, a) for (i = 0; i < a; i++)
#define rEP(i, a) for (i = 0; i <= a; i++)
#define REp(i, a) for (i = a - 1; i >= 0; i--)
#define REP(i, a) for (i = a; i >= 0; i--)

#define repft(i, a, b) for (int i = a; i < b; i++)
#define repfT(i, a, b) for (int i = a; i <= b; i++)
#define Repft(i, a, b) for (int i = a - 1; i >= b; i--)
#define RepfT(i, a, b) for (int i = a; i >= b; i--)

#define foreach(a, it) for (auto it = a.begin(); it != a.end(); ++it)

#define FILL(a, v) fill(begin(a), end(a), v)
#define FILL0(a) memset(a, 0, sizeof(a))
#define FILL1(a) memset(a, -1, sizeof(a))

typedef long long ll;

typedef unsigned long long ull;
typedef pair<int, int> Pi;
typedef pair<ll, ll> Pll;

const int INF = 1000000009;
const ll INFLL = 0x1f1f1f1f1f1f1f1fLL; // 2,242,545,357,980,376,863

template <class A, class B>
inline ostream &operator<<(ostream &st, const pair<A, B> &P) {
  return st << "(" << P.first << "," << P.second << ")";
};
template <class A, class B>
inline pair<A, B> operator+(const pair<A, B> &P, const pair<A, B> &Q) {
  return pair<A, B>(P.first + Q.first, P.second + Q.second);
};
template <class A, class B>
inline pair<A, B> operator-(const pair<A, B> &P, const pair<A, B> &Q) {
  return pair<A, B>(P.first - Q.first, P.second - Q.second);
};

#define fs first
#define sc second

vector<Pll> ga[100005];
vector<Pll> gb[100005];

ll A[100005];
ll B[100005];

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

  ll n, m, s, t;
  cin >> n >> m >> s >> t;
  --s;
  --t;
  rep(i, m) {
    ll x, y, a, b;
    cin >> x >> y >> a >> b;
    --x;
    --y;
    ga[x].emplace_back(y, a);
    ga[y].emplace_back(x, a);
    gb[x].emplace_back(y, b);
    gb[y].emplace_back(x, b);
  }
  rep(i, 100005) A[i] = B[i] = INFLL;
  A[s] = 0;
  B[t] = 0;
  priority_queue<Pll, vector<Pll>, greater<Pll>> Q;
  Q.push({0, s});
  while (!Q.empty()) {
    ll d = Q.top().fs;
    ll x = Q.top().sc;
    Q.pop();
    if (A[x] < d)
      continue;
    for (auto &p : ga[x]) {
      ll D = d + p.sc;
      if (A[p.fs] <= D)
        continue;
      A[p.fs] = D;
      Q.push({D, p.fs});
    }
  }
  Q.push({0, t});
  while (!Q.empty()) {
    ll d = Q.top().fs;
    ll x = Q.top().sc;
    Q.pop();
    if (B[x] < d)
      continue;
    for (auto &p : gb[x]) {
      ll D = d + p.sc;
      if (B[p.fs] <= D)
        continue;
      B[p.fs] = D;
      Q.push({D, p.fs});
    }
  }
  vector<Pll> r(n);
  rep(i, n) r[i] = {A[i] + B[i], i};
  sort(r.begin(), r.end());
  // for (auto&p : r) cout << "$ " << p << endl;

  int z = 0;
  rep(i, n) {
    for (;;) {
      if (r[z].sc >= i)
        break;
      ++z;
    }
    cout << 1000000000000000LL - r[z].fs << endl;
  }
  return 0;
}

/*
999999574976994
999999574976994
999999574976994
999999574976994
999999574976994
999999574976994
999999574976994
999999574976994

999999574976994
999999574976994
999999574976994
999999574976994
999999574976994
999999574976994
999999574976994
999999574976994
*/