← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	in := bufio.NewReader(os.Stdin)
	var n int
	fmt.Fscan(in, &n)
	parent := make([]int, n+1)
	typ := make([]int, n+1)
	for i := 1; i <= n; i++ {
		fmt.Fscan(in, &parent[i], &typ[i])
	}
	special_parent := make([]int, n+1)
	part_parent := make([]int, n+1)
	for i := 1; i <= n; i++ {
		if parent[i] != -1 {
			if typ[i] == 0 {
				special_parent[i] = parent[i]
			} else if typ[i] == 1 {
				part_parent[i] = parent[i]
			}
		} else {
			special_parent[i] = -1
			part_parent[i] = -1
		}
	}
	depth := make([]int, n+1)
	for i := 1; i <= n; i++ {
		if special_parent[i] == -1 {
			depth[i] = 0
		} else {
			depth[i] = 1 + depth[special_parent[i]]
		}
	}
	const LOG = 18
	par := make([][]int, LOG)
	for k := 0; k < LOG; k++ {
		par[k] = make([]int, n+1)
	}
	for i := 1; i <= n; i++ {
		par[0][i] = special_parent[i]
	}
	for k := 1; k < LOG; k++ {
		for i := 1; i <= n; i++ {
			mid := par[k-1][i]
			if mid != -1 {
				par[k][i] = par[k-1][mid]
			} else {
				par[k][i] = -1
			}
		}
	}
	attach := make([]int, n+1)
	for i := 1; i <= n; i++ {
		if part_parent[i] == -1 {
			attach[i] = i
		} else {
			attach[i] = attach[part_parent[i]]
		}
	}
	var q int
	fmt.Fscan(in, &q)
	for qi := 0; qi < q; qi++ {
		var t, u, v int
		fmt.Fscan(in, &t, &u, &v)
		if u == v {
			fmt.Println("NO")
			continue
		}
		if t == 1 {
			d := depth[v] - depth[u]
			if d <= 0 {
				fmt.Println("NO")
				continue
			}
			anc := v
			for k := 0; k < LOG; k++ {
				if (d & (1 << k)) != 0 {
					anc = par[k][anc]
					if anc == -1 {
						break
					}
				}
			}
			if anc == u {
				fmt.Println("YES")
			} else {
				fmt.Println("NO")
			}
		} else {
			xv := attach[v]
			if xv == v {
				fmt.Println("NO")
				continue
			}
			if u == xv {
				fmt.Println("YES")
				continue
			}
			d := depth[u] - depth[xv]
			if d <= 0 {
				fmt.Println("NO")
				continue
			}
			anc := u
			for k := 0; k < LOG; k++ {
				if (d & (1 << k)) != 0 {
					anc = par[k][anc]
					if anc == -1 {
						break
					}
				}
			}
			if anc == xv {
				fmt.Println("YES")
			} else {
				fmt.Println("NO")
			}
		}
	}
}