Problem p02936 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define P pair<ll, ll>
#define FOR(I, A, B) for (ll I = ll(A); I < ll(B); ++I)
#define FORR(I, A, B) for (ll I = ll((B)-1); I >= ll(A); --I)
#define TO(x, t, f) ((x) ? (t) : (f))
#define SORT(x) (sort(x.begin(), x.end())) // 0 2 2 3 4 5 8 9
#define POSL(x, v)                                                             \
  (lower_bound(x.begin(), x.end(), v) - x.begin()) // xi>=v  x is sorted
#define POSU(x, v)                                                             \
  (upper_bound(x.begin(), x.end(), v) - x.begin()) // xi>v  x is sorted
#define NUM(x, v) (POSU(x, v) - POSL(x, v))        // x is sorted
#define REV(x) (reverse(x.begin(), x.end()))       // reverse
ll gcd(ll a, ll b) {
  if (a % b == 0)
    return b;
  return gcd(b, a % b);
}
ll lcm(ll a, ll b) {
  ll c = gcd(a, b);
  return ((a / c) * (b / c) * c);
}
#define NEXTP(x) next_permutation(x.begin(), x.end())
const ll INF = ll(1e18) + ll(7);
const ll MOD = 1000000007LL;
#define out(a) cout << fixed << setprecision((a))

vector<ll> tree[100001];
ll ans[100001];
bool did[100001];

int main() {

  ll N, Q;
  cin >> N >> Q;
  FOR(i, 0, N - 1) {
    ll a, b;
    cin >> a >> b;
    a--;
    b--;
    tree[a].push_back(b);
    tree[b].push_back(a);
  }
  FOR(i, 0, Q) {
    ll p, x;
    cin >> p >> x;
    ans[p - 1] += x;
  }
  did[0] = true;
  queue<ll> q;
  q.push(0);
  while (q.size()) {
    ll pa = q.front();
    q.pop();
    for (auto to : tree[pa]) {
      if (not did[to]) {
        did[to] = true;
        ans[to] += ans[pa];
        q.push(to);
      }
    }
  }
  cout << ans[0];
  FOR(i, 1, N) cout << " " << ans[i];
  cout << "\n";
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define P pair<ll, ll>
#define FOR(I, A, B) for (ll I = ll(A); I < ll(B); ++I)
#define FORR(I, A, B) for (ll I = ll((B)-1); I >= ll(A); --I)
#define TO(x, t, f) ((x) ? (t) : (f))
#define SORT(x) (sort(x.begin(), x.end())) // 0 2 2 3 4 5 8 9
#define POSL(x, v)                                                             \
  (lower_bound(x.begin(), x.end(), v) - x.begin()) // xi>=v  x is sorted
#define POSU(x, v)                                                             \
  (upper_bound(x.begin(), x.end(), v) - x.begin()) // xi>v  x is sorted
#define NUM(x, v) (POSU(x, v) - POSL(x, v))        // x is sorted
#define REV(x) (reverse(x.begin(), x.end()))       // reverse
ll gcd(ll a, ll b) {
  if (a % b == 0)
    return b;
  return gcd(b, a % b);
}
ll lcm(ll a, ll b) {
  ll c = gcd(a, b);
  return ((a / c) * (b / c) * c);
}
#define NEXTP(x) next_permutation(x.begin(), x.end())
const ll INF = ll(1e18) + ll(7);
const ll MOD = 1000000007LL;
#define out(a) cout << fixed << setprecision((a))

vector<ll> tree[200001];
ll ans[200001];
bool did[200001];

int main() {

  ll N, Q;
  cin >> N >> Q;
  FOR(i, 0, N - 1) {
    ll a, b;
    cin >> a >> b;
    a--;
    b--;
    tree[a].push_back(b);
    tree[b].push_back(a);
  }
  FOR(i, 0, Q) {
    ll p, x;
    cin >> p >> x;
    ans[p - 1] += x;
  }
  did[0] = true;
  queue<ll> q;
  q.push(0);
  while (q.size()) {
    ll pa = q.front();
    q.pop();
    for (auto to : tree[pa]) {
      if (not did[to]) {
        did[to] = true;
        ans[to] += ans[pa];
        q.push(to);
      }
    }
  }
  cout << ans[0];
  FOR(i, 1, N) cout << " " << ans[i];
  cout << "\n";
}