Problem p02936 (C++)

Buggy submission (status: Runtime Error):
#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 = 100005;

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;
}

void makeTree(int pos);
void treeAdd(int pos, int sum);

vector<int> tree[SIZE], graph[SIZE];
int total[SIZE];
int res;
bool visit[SIZE];

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

  int n, q;
  cin >> n >> q;
  for (int i = 0; i < n - 1; ++i) {
    int a, b;
    cin >> a >> b;
    graph[a].pb(b);
    graph[b].pb(a);
  }

  makeTree(1);

  for (int i = 0; i < q; ++i) {
    int p, x;
    cin >> p >> x;
    total[p] += x;
  }

  treeAdd(1, 0);
  cout << total[1];
  for (int i = 2; i <= n; ++i) {
    cout << " " << total[i];
  }
  cout << endl;
  return 0;
}

void makeTree(int pos) {
  visit[pos] = true;
  for (int i = 0; i < graph[pos].size(); ++i) {
    if (visit[graph[pos][i]])
      continue;
    tree[pos].pb(graph[pos][i]);
    makeTree(graph[pos][i]);
  }
  return;
}

void treeAdd(int pos, int sum) {
  sum += total[pos];
  total[pos] = sum;
  res += sum;
  for (int i = 0; i < tree[pos].size(); ++i) {
    treeAdd(tree[pos][i], sum);
  }
  return;
}


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 = 300005;

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;
}

void makeTree(int pos);
void treeAdd(int pos, int sum);

vector<int> tree[SIZE], graph[SIZE];
int total[SIZE];
int res;
bool visit[SIZE];

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

  int n, q;
  cin >> n >> q;
  for (int i = 0; i < n - 1; ++i) {
    int a, b;
    cin >> a >> b;
    graph[a].pb(b);
    graph[b].pb(a);
  }

  makeTree(1);

  for (int i = 0; i < q; ++i) {
    int p, x;
    cin >> p >> x;
    total[p] += x;
  }

  treeAdd(1, 0);
  cout << total[1];
  for (int i = 2; i <= n; ++i) {
    cout << " " << total[i];
  }
  cout << endl;
  return 0;
}

void makeTree(int pos) {
  visit[pos] = true;
  for (int i = 0; i < graph[pos].size(); ++i) {
    if (visit[graph[pos][i]])
      continue;
    tree[pos].pb(graph[pos][i]);
    makeTree(graph[pos][i]);
  }
  return;
}

void treeAdd(int pos, int sum) {
  sum += total[pos];
  total[pos] = sum;
  res += sum;
  for (int i = 0; i < tree[pos].size(); ++i) {
    treeAdd(tree[pos][i], sum);
  }
  return;
}