#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5, INF = 1e9;
int n, q, cnt, dex;
vector<pair<int, int>> adj[N];
struct node {
  int ans, mx[2], mn[2], x[2], y[2], lazy, d;
  node() {
    ans = mx[0] = mn[0] = x[0] = y[0] = lazy = d = 0;
    mn[1] = INF;
    mx[1] = x[1] = y[1] = -INF;
  }
  void add(int val = 1) {
    mx[0] += val;
    mn[0] += val;
    x[0] -= val;
    y[0] -= val;
    d += val;
  }
  void merge(node a, node b) {
    ans = max(a.ans, b.ans);
    for (int i = 0; i < 2; i++) {
      ans = max({ans, b.x[i] + a.mx[i], a.y[i] + b.mx[i]});
      mx[i] = max(a.mx[i], b.mx[i]);
      mn[i] = min(a.mn[i], b.mn[i]);
      x[i] = max({a.x[i], b.x[i], b.mx[i] - 2 * min(a.mn[0], a.mn[1])});
      y[i] = max({a.y[i], b.y[i], a.mx[i] - 2 * min(b.mn[0], b.mn[1])});
    }
  }
  void change() {
    swap(mx[0], mx[1]);
    swap(mn[0], mn[1]);
    swap(x[0], x[1]);
    swap(y[0], y[1]);
    lazy ^= 1;
  }
} seg[N << 3];
struct edge {
  int l, r, w, u, v;
} e[N];
void shift1(int id) {
  seg[id << 1].add(seg[id].d);
  seg[id << 1 | 1].add(seg[id].d);
  seg[id].d = 0;
}
void build(int l, int r, int st = 0, int en = 2 * n - 1, int id = 1) {
  if (l >= en || st >= r) return;
  if (l <= st && en <= r) return seg[id].add();
  shift1(id);
  int mid = st + en >> 1;
  build(l, r, st, mid, id << 1);
  build(l, r, mid, en, id << 1 | 1);
  seg[id].merge(seg[id << 1], seg[id << 1 | 1]);
}
void dfsBuild(int u = 1, int par = -1) {
  for (auto [v, id] : adj[u])
    if (v ^ par) {
      build(e[id].l, e[id].r);
      dfsBuild(v, u);
    }
}
void dfs(int u = 1, int par = 0) {
  for (auto v : adj[u])
    if (v.first ^ par) {
      e[v.second].l = ++cnt;
      dfs(v.first, u);
      e[v.second].r = ++cnt;
      ;
    }
}
void shift2(int id) {
  if (seg[id].lazy) {
    seg[id << 1].change();
    seg[id << 1 | 1].change();
    seg[id].lazy = 0;
  }
}
void update(int l, int r, int st = 0, int en = 2 * n - 1, int id = 1) {
  if (l >= en || st >= r) return;
  if (l <= st && en <= r) return seg[id].change();
  shift2(id);
  int mid = st + en >> 1;
  update(l, r, st, mid, id << 1);
  update(l, r, mid, en, id << 1 | 1);
  seg[id].merge(seg[id << 1], seg[id << 1 | 1]);
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    cin >> e[i].u >> e[i].v >> e[i].w;
    adj[e[i].u].push_back({e[i].v, i});
    adj[e[i].v].push_back({e[i].u, i});
  }
  dfs(), dfsBuild();
  for (int i = 0; i < n - 1; i++)
    if (e[i].w) update(e[i].l, e[i].r);
  cin >> q;
  while (q--) {
    cin >> dex;
    dex--;
    update(e[dex].l, e[dex].r);
    cout << seg[1].ans << endl;
  }
}
