HDU 4916 Count on the path

博客介绍了如何解决HDU 4916问题,该问题要求在给定树结构和多个询问下,找出不在特定路径上的节点的最小标号。博主指出不需要使用LCA(最近公共祖先)方法,而是通过染色策略简化问题。染色后,将问题分为红色、蓝色和绿色子树分别求解。定义了两个动态规划数组f[u][x]和g[u]来分别表示以u为根节点的子树中第x大的节点标号和u节点上方到1路径旁侧子树的最小节点标号。由于杭电平台可能爆栈,需注意使用DFS时要加栈,并以C++提交代码。
摘要由CSDN通过智能技术生成

题意:

给定一棵树和m个询问  每个询问要求回答不在u和v两节点所形成的路径上的点的最小标号

思路:

一开始以为是LCA…  不过T了好几次…  后来发现不用LCA也可做

考虑每个询问u和v  如果他们的lca不是1  则1一定是答案  不过求lca会T  那么我们只需要在遍历树的时候给节点染色  染的颜色就是1的儿子的颜色  如果x这个点在y的子树中(y是1的儿子)那么他的颜色就是y

染完色后我们考虑答案是如何构成的


如图所示  答案即是  红色  蓝色  绿色的子树中节点的最小值  那么我们只需要分开三部分求解即可

定义f[u][x]表示以u为根的子树中第x大的节点标号  这个可以通过树形dp求解  有了这个就可以解决绿色和红色的部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值