jzoj. 3523. 【NOIP2013模拟11.7A组】JIH的玩偶(tree)
来源:互联网 发布:大数据培训 达内就业 编辑:程序博客网 时间:2024/05/21 19:46
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
分析(by jzoj):
树上的倍增
F、gs,gb,gu[i,k] 为i向上2^k的节点的节点标号,区间的最小、最大、答案
gu[I,k]=max(gu[I,k-1],gu[g[I,k-1],k-1],gb[g[I,k-1],k-1]-gs[I,k-1])
f,gs,gb类似
对于每个询问,先找到最大的k使得g[x,k]在终点或终点以下,
Ans=max(ans,gu[x,k],gb[x,k]-last);
last:=min(last,gs[x,k]);
x:=g[x,k];
如此递归求解,直到x为终点
复杂度O(nlogn)
(题解有点模糊,可以看代码理解一下,估计就懂了)。
代码:
const maxn=200001;var f:array [0..maxn,0..20] of longint; maxa,mina,ansa:array [0..maxn,0..20] of longint; a:array [1..maxn] of longint; n,m,i,j,q,x,y,p,e,g,h,ans,s,t:longint;function max(x,y:longint):longint; begin if x>y then exit(x) else exit(y); end;function min(x,y:longint):longint; begin if x<y then exit(x) else exit(y); end;function log(x:longint):longint;var t,sum:longint; begin if x=0 then exit(0); t:=1; sum:=0; while t<=x do begin t:=t*2; sum:=sum+1; end; exit(sum-1); end;begin assign(input,'tree.in'); assign(output,'tree.out'); reset(input); rewrite(output); readln(n); for i:=1 to n do read(a[i]); for i:=1 to n-1 do begin readln(x,y); f[x,0]:=y; maxa[x,0]:=max(a[x],a[y]); mina[x,0]:=min(a[x],a[y]); ansa[x,0]:=max(0,a[y]-a[x]); end; for j:=1 to log(n) do for i:=1 to n do begin f[i,j]:=f[f[i,j-1],j-1]; maxa[i,j]:=max(maxa[i,j-1],maxa[f[i,j-1],j-1]); mina[i,j]:=min(mina[i,j-1],mina[f[i,j-1],j-1]); ansa[i,j]:=max(ansa[i,j-1],ansa[f[i,j-1],j-1]); ansa[i,j]:=max(ansa[i,j],maxa[f[i,j-1],j-1]-mina[i,j-1]); end; readln(q); for i:=1 to q do begin readln(x,y); if y=1 then begin writeln(0); continue; end; y:=y-1; p:=log(y); h:=y-1 shl p; e:=x; s:=0; t:=maxlongint; for g:=0 to log(h) do begin if h mod 2=1 then begin if mina[e,g]<t then t:=mina[e,g]; if maxa[f[e,p],g]>s then s:=maxa[f[e,p],g]; e:=f[e,g]; end; h:=h div 2; end; ans:=max(ansa[x,p],ansa[e,p]); ans:=max(ans,s-t); writeln(ans); end; close(input); close(output);end.
- jzoj. 3523. 【NOIP2013模拟11.7A组】JIH的玩偶(tree)
- 3523. 【NOIP2013模拟11.7A组】JIH的玩偶(tree)
- 3523. 【NOIP2013模拟11.7A组】JIH的玩偶(tree)
- 高中3523. 【NOIP2013模拟11.7A组】JIH的玩偶
- JIH的玩偶
- Jzoj3523 JIH的玩偶
- JZOJ 3506. 【NOIP2013模拟11.4A组】善良的精灵
- JZOJ 3506. 【NOIP2013模拟11.4A组】善良的精灵
- JZOJ 3526. 【NOIP2013模拟11.7A组】不等式(solve)
- jzoj. 3526. 【NOIP2013模拟11.7A组】不等式(solve)
- JIH的玩偶 8.2 T3
- [jzoj]3457. 【NOIP2013模拟联考3】沙耶的玩偶(doll)(匈牙利-二分图最大匹配)
- jzoj. 3518. 【NOIP2013模拟11.6A组】进化序列(evolve)
- JZOJ 3518. 【NOIP2013模拟11.6A组】进化序列(evolve)
- jzoj. 3505. 【NOIP2013模拟11.4A组】积木(brick)
- JZOJ 3505. 【NOIP2013模拟11.4A组】积木(brick)
- [jzoj]3526. 【NOIP2013模拟11.7A组】不等式(solve)(类欧几里得)
- JZOJ3457. 【NOIP2013模拟联考3】沙耶的玩偶(doll) (2017.8B组)
- echarts之bootstrap选项卡不能显示其他标签echarts图表
- Debug日志:一个关于“全局变量”的常见错误
- LintCode-最长连续序列
- 北京大学可视化发展前沿研究生暑期学校Day3
- JZOJ 3712【NOI2014模拟6.30】石中剑的考验
- jzoj. 3523. 【NOIP2013模拟11.7A组】JIH的玩偶(tree)
- XILINX rom ram IP 核 如何编写coe 文件
- 移动端web开发之坑---input内文字与同行文字不对齐问题
- java实现记住密码功能(利用cookie)
- 【算法和数据结构】—— 1.选择排序、插入排序
- FastDFS常见问题
- Dubbo框架初步认识
- [bitset]BZOJ 3687——简单题
- C语言基础试题