hdu 5692 Snacks 题解(DFS序)

期末复习好不容易抽时间写的题解。。。
原题链接:
hdu

题意简述

给定一棵树,从 0 0 0开始编号( 0 0 0是根),支持两种操作:

  1. 格式:0 x y单点修改第 x x x个节点的权值为 y y y y y y珂能是负的)
  2. 格式: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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值