期末复习好不容易抽时间写的题解。。。
原题链接:
hdu
题意简述
给定一棵树,从 0 0 0开始编号( 0 0 0是根),支持两种操作:
- 格式:
0 x y
单点修改第 x x x个节点的权值为 y y y( y y y珂能是负的) - 格式:
1 x
询问从 0 0 0开始必须经过点 x x x的路径中权值和最大的是多少?
数据
输入
T //表示有T组数据
对于每组数据,
n m //n个点,m次操作
u v
u v
...
u v //n-1行,给出这个树(表示u和v连边)
a1 a2 ... an //n个数,表示每个点的初始点权
operation
operation
...
operation //m个,每个表示一个操作,是0 x y或1 x的形式
输出
Case #1:
ans
ans
...
ans
Case #2:
ans
ans
...
ans
...
Case #T:
ans
ans
...
ans //分测试数据。对于每个1格式的询问,输出操作
样例
输入
1
6 5
0 1
1 2
0 3
3 4
5 3
7 -5 100 20 -5 -7
1 1
1 3
0 2 -1
1 1
1 5
输出
Case #1:
102
27
2
20
思路
(首先 0 0 0编号让我十分反感。所以我决定把这个东西加一,变成 1 1 1编号)
我们会发现,如果从 1 1 1开始到 x x x,那么只有一条确定的路。如果要经过 x x x,那么就只能是从 1 1 1到 x x x的子树(包括 x x x)的点。只有到 x x x的子树的时候,路径上才会经过 x x x。
那么我们就相当于要询问:
x x x的子树中,哪个点 k k k满足 1 1 1到 k k k