您的位置:首页 > 其它

3523. 【NOIP2013模拟11.7A组】JIH的玩偶(tree)

2017-07-11 19:37 239 查看
Description

JIH的玩具厂设立以来,发展了一张销售关系网。这张网以玩具厂为总代理(根),构成一颗树。每个节点都代表一个客户,且每个节点都有重要度ai。JIH想将这些客户划成若干类别,当然同一类的客户重要度相差太大总是不妥。所以JIH决定先进行市场调研。JIH会选择两个客户X,从X向根走一共k个节点进行调查。调查的结果是这条路径上重要程度相差最大的两个客户的差值是多少。因为特殊需要,要求重要度大的客户必须在重要度小的客户后面(顺序为X到根,若序列为递减,则输出0,详情见样例)。


Input

第一行一个整数N 表示N个客户

第二行N个整数Ai 表示N个客户的重要程度(工厂是1)

第三行开始 共N-1行 每行2个整数 x,y 表示x的父亲是y

接着一行一个正整数Q,表示Q次调研

接着Q行,每行两个整数X,K。含义见题目表述。

Output

Q行,每行一个正整数,含义见题目描述。

Sample Input

6

5 6 1 7 5 2

2 1

3 1

4 2

5 2

6 3

3

4 3

6 2

6 3

Sample Output

0

0

4

Data Constraint

30% 的数据中N,Q<=1000

100%的数据中N,Q<=200000  Ai<=1000000


分析:这题由于数据太大了,于是我们使用rmq算法求出在第i个点走2^j步遇到的点,然后再设多三个数组,一个是最小值,一个是最大值,还有一个是求答案的。

最大和最小的方程:f[i][j] = max(f[i][j],f[f[i][j-1]][j-1]);

答案求法:g[i][j] = max(g[i][j-1],g[f[i][j-1]][j-1],max_[f[i][j-1]][j-1] - min_[i][j-1]);

最后递推:

ans = max(ans,gu[x][j]);

ans = max(ans,gb[x][j]-last);

last = min(last,gs[x][j]);

x = f[x][j];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: