Problem p02799 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
#define MOD 1000000007LL
using namespace std;
typedef long long ll;
typedef pair<int, int> P;

int n, m;
int d[100005];
vector<P> G[100005];
int u[100005], v[100005];
int res[200005];
int col[100005];
int mini;
P p[100005];

bool check() {
  for (int i = 0; i < n; i++) {
    p[i] = P(d[i], i);
  }
  sort(p, p + n);
  for (int i = 0; i < n; i++) {
    int v = p[i].second;
    if (col[v] != 0) {
      continue;
    }
    // printf("check%d\n",v);
    bool flag = false;
    for (int j = 0; j < G[v].size(); j++) {
      int nv = G[v][j].first;
      if (d[v] == d[nv]) {
        res[G[v][j].second] = d[v];
        if (col[nv] != 0) {
          col[v] = -col[nv];
          flag = true;
          break;
        } else {
          col[v] = 1;
          col[nv] = -1;
          flag = true;
          break;
        }
      } else if (d[v] > d[nv]) {
        res[G[v][j].second] = d[v];
        col[v] = -col[nv];
        flag = true;
        break;
      }
    }
    if (!flag) {
      return false;
    }
  }
  return true;
}

int main(void) {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    scanf("%d", &d[i]);
  }
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &u[i], &v[i]);
    u[i]--;
    v[i]--;
    G[u[i]].push_back(P(v[i], i));
    G[v[i]].push_back(P(u[i], i));
  }
  mini = d[0];
  for (int i = 0; i < n; i++) {
    mini = min(mini, d[i]);
  }
  if (!check()) {
    printf("-1\n");
    return 0;
  }

  for (int i = 0; i < m; i++) {
    if (res[i] == 0) {
      res[i] = 1000000000;
    }
  }
  for (int i = 0; i < n; i++) {
    printf("%c", col[i] == 1 ? 'B' : 'W');
  }
  printf("\n");
  for (int i = 0; i < m; i++) {
    printf("%d\n", res[i]);
  }
  return 0;
}


Fixed submission:
#include <bits/stdc++.h>
#define MOD 1000000007LL
using namespace std;
typedef long long ll;
typedef pair<int, int> P;

int n, m;
int d[100005];
vector<P> G[100005];
int u[200005], v[200005];
int res[200005];
int col[100005];
int mini;
P p[100005];

bool check() {
  for (int i = 0; i < n; i++) {
    p[i] = P(d[i], i);
  }
  sort(p, p + n);
  for (int i = 0; i < n; i++) {
    int v = p[i].second;
    if (col[v] != 0) {
      continue;
    }
    // printf("check%d\n",v);
    bool flag = false;
    for (int j = 0; j < G[v].size(); j++) {
      int nv = G[v][j].first;
      if (d[v] == d[nv]) {
        res[G[v][j].second] = d[v];
        if (col[nv] != 0) {
          col[v] = -col[nv];
          flag = true;
          break;
        } else {
          col[v] = 1;
          col[nv] = -1;
          flag = true;
          break;
        }
      } else if (d[v] > d[nv]) {
        res[G[v][j].second] = d[v];
        col[v] = -col[nv];
        flag = true;
        break;
      }
    }
    if (!flag) {
      return false;
    }
  }
  return true;
}

int main(void) {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) {
    scanf("%d", &d[i]);
  }
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &u[i], &v[i]);
    u[i]--;
    v[i]--;
    G[u[i]].push_back(P(v[i], i));
    G[v[i]].push_back(P(u[i], i));
  }
  mini = d[0];
  for (int i = 0; i < n; i++) {
    mini = min(mini, d[i]);
  }
  if (!check()) {
    printf("-1\n");
    return 0;
  }

  for (int i = 0; i < m; i++) {
    if (res[i] == 0) {
      res[i] = 1000000000;
    }
  }
  for (int i = 0; i < n; i++) {
    printf("%c", col[i] == 1 ? 'B' : 'W');
  }
  printf("\n");
  for (int i = 0; i < m; i++) {
    printf("%d\n", res[i]);
  }
  return 0;
}