#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5, mod = 1e9 + 7;
vector<int> chld[MAXN];
int drz[8 * MAXN], nr[MAXN], czesc[MAXN], rodzaj[MAXN], ojc[MAXN],
    pos = 1, spoj[MAXN], lspoj = 1, n;
bool part[MAXN];
void dod(int nr, int p, int k, int gdzie, int co) {
  int s = (p + k) / 2;
  drz[nr] = min(drz[nr], co);
  if (p == k)
    drz[nr] = co;
  else {
    if (gdzie <= s)
      dod(nr * 2, p, s, gdzie, co);
    else
      dod(nr * 2 + 1, s + 1, k, gdzie, co);
  }
}
int mini(int nr, int p, int k, int sp, int sk) {
  if (p == sp && k == sk) return drz[nr];
  int s = (p + k) / 2, x = 1e6;
  if (sp <= s) x = min(x, mini(nr * 2, p, s, sp, min(s, sk)));
  if (sk > s) x = min(x, mini(nr * 2 + 1, s + 1, k, max(s + 1, sp), sk));
  return x;
}
void pac(int co) {
  nr[co] = pos;
  dod(1, 1, 2 * n, pos++, co);
  if (ojc[co] == -1) {
    lspoj++;
    czesc[co] = rodzaj[co] = 1;
  } else {
    czesc[co] = czesc[ojc[co]] + 1;
    rodzaj[co] = rodzaj[ojc[co]] + 1;
    if (part[co])
      czesc[co]--;
    else
      rodzaj[co]--;
  }
  spoj[co] = lspoj;
  for (auto x : chld[co]) {
    pac(x);
    dod(1, 1, 2 * n, pos++, co);
  }
}
int main() {
  int a, b, c, d, e, f, q;
  scanf("%d", &n);
  for (a = 1; a <= 8 * n; a++) drz[a] = 1e6;
  for (a = 1; a <= n; a++) {
    scanf("%d%d", &b, &c);
    ojc[a] = b;
    if (c) part[a] = 1;
    if (b != -1) chld[b].push_back(a);
  }
  for (a = 1; a <= n; a++)
    if (!nr[a]) pac(a);
  scanf("%d", &q);
  while (q--) {
    scanf("%d%d%d", &a, &b, &c);
    if (spoj[b] != spoj[c] || b == c) {
      printf("NO\n");
      continue;
    }
    d = min(nr[b], nr[c]);
    e = max(nr[b], nr[c]);
    f = mini(1, 1, 2 * n, d, e);
    if (a == 1) {
      if (f == b && rodzaj[c] == rodzaj[b])
        printf("YES\n");
      else
        printf("NO\n");
    } else {
      if (rodzaj[f] == rodzaj[b] && c != f && czesc[c] == czesc[f])
        printf("YES\n");
      else
        printf("NO\n");
    }
  }
  return 0;
}
