グラフに対するクエリ処理
K - 巨大企業
O(N)
import sys import math import heapq import itertools from collections import deque from functools import reduce sys.setrecursionlimit(1000000) # main def main(): N = int(input()) R = -1 edges = [] for i in range(N): edges.append([]) for i in range(N): p = int(input()) if p == -1: R = i else: edges[p-1].append(i) gueries = [] for i in range(N): gueries.append([]) Q = int(input()) for q in range(Q): a, b = list(map(int, input().split())) gueries[a-1].append([q, b-1]) ans=[False]*Q boss=[False]*N def dfs(i): for q, b in gueries[i]: ans[q] = boss[b] boss[i] = True for j in edges[i]: dfs(j) boss[i] = False dfs(R) for q in range(Q): if ans[q]: print("Yes") else: print("No") # エントリポイント if __name__ == '__main__': main()