#include <bits/stdc++.h>
using namespace std;
const int maxn = 500009;
vector<pair<int, int>> V[maxn];
int va[maxn], vb[maxn], fa[maxn], ans[maxn], stone[maxn], q[maxn], istone[maxn],
    tot, dfn[maxn], sz[maxn];
int Max1[maxn << 2], Max2[maxn << 2];
bool lz[maxn << 2];
void build(int rt, int l, int r, int p, int v, int d) {
  lz[rt] = 0;
  if (l == r) {
    if (v & 1)
      Max2[rt] = d, Max1[rt] = 0;
    else
      Max1[rt] = d, Max2[rt] = 0;
    return;
  }
  int mid = (l + r) >> 1;
  if (p <= mid)
    build(rt << 1, l, mid, p, v, d);
  else
    build(rt << 1 | 1, mid + 1, r, p, v, d);
  Max1[rt] = max(Max1[rt << 1], Max1[rt << 1 | 1]);
  Max2[rt] = max(Max2[rt << 1], Max2[rt << 1 | 1]);
}
void upd(int rt, int l, int r, int ll, int rr) {
  if (ll <= l && rr >= r) {
    lz[rt] ^= 1;
    swap(Max1[rt], Max2[rt]);
    return;
  }
  int mid = (l + r) >> 1;
  if (lz[rt]) {
    lz[rt << 1] ^= 1;
    lz[rt << 1 | 1] ^= 1;
    swap(Max1[rt << 1], Max2[rt << 1]);
    swap(Max1[rt << 1 | 1], Max2[rt << 1 | 1]);
    lz[rt] = 0;
  }
  if (ll <= mid) upd(rt << 1, l, mid, ll, rr);
  if (rr > mid) upd(rt << 1 | 1, mid + 1, r, ll, rr);
  Max1[rt] = max(Max1[rt << 1], Max1[rt << 1 | 1]);
  Max2[rt] = max(Max2[rt << 1], Max2[rt << 1 | 1]);
}
int len, st;
int n;
void dfs(int u, int f, int d = 0) {
  if (d >= len) len = d, st = u;
  for (auto [v, idx] : V[u])
    if (v != f) dfs(v, u, d + 1);
}
void gao(int u, int f, int val = 0, int d = 0) {
  sz[u] = 1;
  dfn[u] = ++tot;
  build(1, 1, n, tot, val, d);
  for (auto [v, idx] : V[u])
    if (v != f) {
      if (va[idx] == v)
        fa[idx] = 1;
      else
        fa[idx] = 0;
      gao(v, u, val + stone[idx], d + 1);
      sz[u] += sz[v];
    }
}
int main() {
  ios_base::sync_with_stdio(false);
  cout.tie(0);
  cin.tie(0);
  cin >> n;
  for (int i = 0; i < n - 1; ++i) {
    cin >> va[i] >> vb[i] >> stone[i];
    V[va[i]].emplace_back(vb[i], i);
    V[vb[i]].emplace_back(va[i], i);
  }
  int aq;
  cin >> aq;
  for (int i = 0; i < aq; ++i) cin >> q[i], q[i]--;
  dfs(1, 1);
  int S = st, T;
  len = 0;
  dfs(S, S);
  T = st;
  for (int x : {S, T}) {
    tot = 0;
    gao(x, x);
    for (int i = 0; i < aq; ++i) {
      int op;
      if (fa[q[i]] == 0) {
        op = vb[q[i]];
      } else {
        op = va[q[i]];
      }
      upd(1, 1, n, dfn[op], dfn[op] + sz[op] - 1);
      ans[i] = max(ans[i], Max1[1]);
    }
  }
  for (int i = 0; i < aq; ++i) cout << ans[i] << '\n';
  return 0;
}
