苹方树
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给定一棵 N个节点的树,根为1
给定 M 条从 xy 的路径,第 j 条路径的价值为 l_j
节点 i 的权值 v_i 定义如下:
  • v_i 初始是 1
  • i 为根的子树如果包含了第 j 条路径中至少一个节点,那么 v_i 就要乘上 l_j

给定 Q 次询问,每次询问节点 q 的权值 v_q 是否为完全平方数。

输入描述:

一个 N 表示树的节点个数。 
接下来 N-1 行每行两个正整数 x,y 表示树的一条无向边。
一个 M 表示路径个数。
接下来 M 行每行三个正整数 a,b,w 表示价值为 w、两端为 a,b 的路径。
一个 Q 表示询问个数。
接下来 Q 行每行一个正整数 q 表示询问的节点。







输出描述:

输出 Q 行。 
对于每一次询问节点 q ,输出 `YES` 或 `NO` 表示 v_q 是完全平方数或不是完全平方数。
示例1

输入

复制
5
1 2
2 3
2 4
1 5
2
2 5 2
3 4 18
5
1
2
3
4
5

输出

复制
YES
YES
NO
NO
NO

说明

1 的子树内有路径1,2v_1=1\times l_1\times l_2=36 
2 的子树内有路径1,2v_2=1\times l_1\times l_2=36
3 的子树内有路径2 ,  v_3=1\times l_2=18
4 的子树内有路径2 ,  v_4=1\times l_2=18
5 的子树内有路径1 ,  v_5=1\times l_1=2