Problem p02565 (C++) — buggy submission, verdict: Runtime Error

// #define _GLIBCXX_DEBUG

#include <bits/stdc++.h>
using namespace std;

// #define endl '\\n'
#define lfs cout << fixed << setprecision(10)
#define ALL(a) (a).begin(), (a).end()
#define ALLR(a) (a).rbegin(), (a).rend()
#define spa << " " <<
#define fi first
#define se second
#define MP make_pair
#define MT make_tuple
#define PB push_back
#define EB emplace_back
#define rep(i, n, m) for (ll i = (n); i < (ll)(m); i++)
#define rrep(i, n, m) for (ll i = (ll)(m)-1; i >= (ll)(n); i--)
using ll = long long;
using ld = long double;
const ll MOD1 = 1e9 + 7;
const ll MOD9 = 998244353;
const ll INF = 1e18;
using P = pair<ll, ll>;
template <typename T1, typename T2> bool chmin(T1 &a, T2 b) {
  if (a > b) {
    a = b;
    return true;
  } else
    return false;
}
template <typename T1, typename T2> bool chmax(T1 &a, T2 b) {
  if (a < b) {
    a = b;
    return true;
  } else
    return false;
}
ll median(ll a, ll b, ll c) {
  return a + b + c - max({a, b, c}) - min({a, b, c});
}
void ans1(bool x) {
  if (x)
    cout << "Yes" << endl;
  else
    cout << "No" << endl;
}
void ans2(bool x) {
  if (x)
    cout << "YES" << endl;
  else
    cout << "NO" << endl;
}
void ans3(bool x) {
  if (x)
    cout << "Yay!" << endl;
  else
    cout << ":(" << endl;
}
template <typename T1, typename T2> void ans(bool x, T1 y, T2 z) {
  if (x)
    cout << y << endl;
  else
    cout << z << endl;
}
template <typename T> void debug(vector<vector<T>> &v, ll h, ll w) {
  for (ll i = 0; i < h; i++) {
    cout << v[i][0];
    for (ll j = 1; j < w; j++)
      cout spa v[i][j];
    cout << endl;
  }
};
void debug(vector<string> &v, ll h, ll w) {
  for (ll i = 0; i < h; i++) {
    for (ll j = 0; j < w; j++)
      cout << v[i][j];
    cout << endl;
  }
};
template <typename T> void debug(vector<T> &v, ll n) {
  if (n != 0)
    cout << v[0];
  for (ll i = 1; i < n; i++)
    cout spa v[i];
  cout << endl;
};
template <typename T> vector<vector<T>> vec(ll x, ll y, T w) {
  vector<vector<T>> v(x, vector<T>(y, w));
  return v;
}
ll gcd(ll x, ll y) {
  ll r;
  while (y != 0 && (r = x % y) != 0) {
    x = y;
    y = r;
  }
  return y == 0 ? x : y;
}
vector<ll> dx = {1, -1, 0, 0, 1, 1, -1, -1};
vector<ll> dy = {0, 0, 1, -1, 1, -1, 1, -1};
template <typename T> vector<T> make_v(size_t a, T b) {
  return vector<T>(a, b);
}
template <typename... Ts> auto make_v(size_t a, Ts... ts) {
  return vector<decltype(make_v(ts...))>(a, make_v(ts...));
}
template <typename T1, typename T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &p) {
  return os << p.first << " " << p.second;
}
template <typename T> ostream &operator<<(ostream &os, const vector<T> &v) {
  for (auto &z : v)
    os << z << " ";
  cout << "|";
  return os;
}
// mt19937 mt(chrono::steady_clock::now().time_since_epoch().count());
struct SCC {
  ll n;
  vector<vector<ll>> &G, Gr;
  vector<ll> index; // 各ノードが属する強連結成分の番号
  vector<ll> ret;   // dfsに使う
  SCC(vector<vector<ll>> &g) : G(g), n(g.size()) {
    index.assign(n, -1LL);
    build();
  }
  void build() {
    Gr.assign(n, vector<ll>());
    for (ll i = 0; i < n; i++) {
      for (ll j = 0; j < G[i].size(); j++) {
        Gr[G[i][j]].push_back(i);
      }
    }
    for (ll i = 0; i < n; i++)
      if (index[i] == -1)
        dfs1(i);
    fill(ALL(index), -1);
    ll cnt = 0;
    reverse(ALL(ret));
    for (ll i = 0; i < n; i++) {
      if (index[ret[i]] == -1) {
        dfs2(ret[i], cnt);
        cnt++;
      }
    }
  }
  void dfs1(ll k) {
    index[k] = 1;
    for (ll i = 0; i < G[k].size(); i++) {
      if (index[G[k][i]] == -1)
        dfs1(G[k][i]);
    }
    ret.push_back(k);
  }
  void dfs2(ll k, ll idx) {
    index[k] = idx;
    for (ll i = 0; i < Gr[k].size(); i++) {
      if (index[Gr[k][i]] == -1)
        dfs2(Gr[k][i], idx);
    }
  }
  vector<vector<ll>> edges;
  void build_edges() {
    edges.assign(*max_element(ALL(index)) + 1, vector<ll>());
    for (ll i = 0; i < n; i++) {
      for (ll j = 0; j < G[i].size(); j++) {
        if (index[i] != index[G[i][j]]) {
          edges[index[i]].push_back(index[G[i][j]]);
        }
      }
    }
  }
  vector<ll> output() { return index; };
};

struct TwoSat {
  ll n;
  vector<vector<ll>> g;
  TwoSat(ll N) : n(N) { g.assign(2 * n, vector<ll>()); }
  void add_or(ll x, bool tx, ll y, bool ty) { // x+n:true x:false
    // cout<<x spa tx spa y spa ty<<endl;
    g[x + tx * n].push_back(y + !ty * n);
    g[y + ty * n].push_back(x + !tx * n);
  }
  vector<bool> ans;
  bool solve(bool isConstruct = false) {
    SCC scc(g);
    for (ll i = 0; i < n; i++)
      if (scc.index[i] == scc.index[i + n])
        return false;
    if (isConstruct) {
      ans.assign(n, false);
      for (ll i = 0; i < n; i++)
        ans[i] = (scc.index[i] > scc.index[i + n]);
    }
    return true;
  }
};
int main() {
  cin.tie(nullptr);
  ios_base::sync_with_stdio(false);
  ll res = 0, buf = 0;
  bool judge = true;
  ll n, d;
  cin >> n >> d;
  auto v = vec(n, 2, 0LL);
  rep(i, 0, n) cin >> v[i][0] >> v[i][1];
  TwoSat sat(n);
  rep(i, 0, n) rep(ti, 0, 2) rep(j, i + 1, n) rep(tj, 0, 2) {
    if (abs(v[i][ti] - v[j][tj]) < d) {
      sat.add_or(i, !ti, j, !tj);
    }
  }
  judge = sat.solve(true);
  ans1(judge);
  if (judge) {
    rep(i, 0, n) cout << v[i][sat.ans[i]] << endl;
  }
  return 0;
}

Error: -6
malloc(): corrupted top size


Fixed submission:

#include <bits/stdc++.h>
using namespace std;

#define endl '\\n'
#define lfs cout << fixed << setprecision(10)
#define ALL(a) (a).begin(), (a).end()
#define ALLR(a) (a).rbegin(), (a).rend()
#define spa << " " <<
#define fi first
#define se second
#define MP make_pair
#define MT make_tuple
#define PB push_back
#define EB emplace_back
#define rep(i, n, m) for (ll i = (n); i < (ll)(m); i++)
#define rrep(i, n, m) for (ll i = (m)-1; i >= (ll)(n); i--)
using ll = long long;
using ld = long double;
const ll MOD = 1e9 + 7;
// const ll MOD = 998244353;
const ll INF = 1e18;
using P = pair<ll, ll>;
template <typename T> bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  } else
    return false;
}
template <typename T> bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  } else
    return false;
}
ll median(ll a, ll b, ll c) {
  return a + b + c - max({a, b, c}) - min({a, b, c});
}
void ans1(bool x) {
  if (x)
    cout << "Yes" << endl;
  else
    cout << "No" << endl;
}
void ans2(bool x) {
  if (x)
    cout << "YES" << endl;
  else
    cout << "NO" << endl;
}
void ans3(bool x) {
  if (x)
    cout << "Yay!" << endl;
  else
    cout << ":(" << endl;
}
template <typename T1, typename T2> void ans(bool x, T1 y, T2 z) {
  if (x)
    cout << y << endl;
  else
    cout << z << endl;
}
template <typename T> void debug(vector<vector<T>> &v, ll h, ll w) {
  for (ll i = 0; i < h; i++) {
    cout << v[i][0];
    for (ll j = 1; j < w; j++)
      cout spa v[i][j];
    cout << endl;
  }
};
void debug(vector<string> &v, ll h, ll w) {
  for (ll i = 0; i < h; i++) {
    for (ll j = 0; j < w; j++)
      cout << v[i][j];
    cout << endl;
  }
};
template <typename T> void debug(vector<T> &v, ll n) {
  if (n != 0)
    cout << v[0];
  for (ll i = 1; i < n; i++)
    cout spa v[i];
  cout << endl;
};
template <typename T> vector<vector<T>> vec(ll x, ll y, T w) {
  vector<vector<T>> v(x, vector<T>(y, w));
  return v;
}
ll gcd(ll x, ll y) {
  ll r;
  while (y != 0 && (r = x % y) != 0) {
    x = y;
    y = r;
  }
  return y == 0 ? x : y;
}
vector<ll> dx = {1, 0, -1, 0, 1, 1, -1, -1};
vector<ll> dy = {0, 1, 0, -1, 1, -1, 1, -1};
template <typename T> vector<T> make_v(size_t a, T b) {
  return vector<T>(a, b);
}
template <typename... Ts> auto make_v(size_t a, Ts... ts) {
  return vector<decltype(make_v(ts...))>(a, make_v(ts...));
}
ostream &operator<<(ostream &os, pair<ll, ll> &p) {
  return os << p.first << " " << p.second;
}
struct SCC {
  ll n;
  vector<vector<ll>> G, Gr;
  vector<ll> index; // 各ノードが属する強連結成分の番号
  vector<ll> ret;   // dfsに使う
  SCC(vector<vector<ll>> g) : G(g), n(g.size()) {
    index.assign(n, -1LL);
    build();
  }
  void build() {
    Gr.assign(n, vector<ll>());
    for (ll i = 0; i < n; i++) {
      for (ll j = 0; j < G[i].size(); j++) {
        Gr[G[i][j]].push_back(i);
      }
    }
    for (ll i = 0; i < n; i++)
      if (index[i] == -1)
        dfs1(i);
    fill(ALL(index), -1);
    ll cnt = 0;
    reverse(ALL(ret));
    for (ll i = 0; i < n; i++) {
      if (index[ret[i]] == -1) {
        dfs2(ret[i], cnt);
        cnt++;
      }
    }
  }
  void dfs1(ll k) {
    index[k] = 1;
    for (ll i = 0; i < G[k].size(); i++) {
      if (index[G[k][i]] == -1)
        dfs1(G[k][i]);
    }
    ret.push_back(k);
  }
  void dfs2(ll k, ll idx) {
    index[k] = idx;
    for (ll i = 0; i < Gr[k].size(); i++) {
      if (index[Gr[k][i]] == -1)
        dfs2(Gr[k][i], idx);
    }
  }
  vector<vector<ll>> edges;
  void build_edges() {
    edges.assign(*max_element(ALL(index)) + 1, vector<ll>());
    for (ll i = 0; i < n; i++) {
      for (ll j = 0; j < G[i].size(); j++) {
        if (index[i] != index[G[i][j]]) {
          edges[index[i]].push_back(index[G[i][j]]);
        }
      }
    }
  }
  vector<ll> output() { return index; };
};

struct TwoSat {
  ll n;
  vector<vector<ll>> g;
  TwoSat(ll N) : n(N) { g.assign(2 * n, vector<ll>()); }
  void add_or(ll x, ll y) {
    g[(x + n) % (2 * n)].PB(y);
    g[(y + n) % (2 * n)].PB(x);
  }
  vector<bool> ans;
  bool solve(bool isConstruct = false) {
    SCC scc(g);
    for (ll i = 0; i < n; i++)
      if (scc.index[i] == scc.index[i + n])
        return false;
    if (isConstruct) {
      ans.assign(n, false);
      for (ll i = 0; i < n; i++)
        ans[i] = (scc.index[i] > scc.index[i + n]);
    }
    return true;
  }
};
int main() {
  cin.tie(nullptr);
  ios_base::sync_with_stdio(false);
  ll res = 0, buf = 0;
  bool judge = true;
  string tmp;
  cin >> tmp;
  cin >> tmp;
  ll n, m;
  cin >> n >> m;
  TwoSat sat(n);
  rep(i, 0, m) {
    ll x, y, v;
    cin >> x >> y >> v;
    ll x2 = (abs(x) - 1) + (x < 0) * n;
    ll y2 = (abs(y) - 1) + (y < 0) * n;
    sat.add_or(x2, y2);
  }

  if (!sat.solve(true)) {
    cout << "s UNSATISFIABLE" << endl;
  } else {
    cout << "s SATISFIABLE" << endl;
    cout << "v";
    rep(i, 0, n) {
      ll k = i + 1;
      if (!sat.ans[i])
        k *= -1;
      cout << " " << k;
    }
    cout << " 0" << endl;
  }
  return 0;
}