HDU 4274-Spy's Work-树dp



。。。http://acm.hdu.edu.cn/showproblem.php?pid=4274


题意:一个结构像一棵树一样的公司。一个间谍去打探,然后发回来一些消息,让我们判断真假。

消息里有一条不对,我们就认为间谍撒谎。否则正确。

这里的消息就是 X <=> Y 表示X这个子节点和其所有子孙的和与Y的关系 

当时还想把X按dfs序拆成一个区间维护。。。其实只需要维护每一个点的上下界信息就好了


dn[i]、up[i]是根据间谍信息得到第i个点的上界和下界,这部分根据输入可以更新,初始值分别为1和inf

接下来跑一遍dfs即可,dfs的过程,还需要一个数组 least_dn[i],表示这个节点实际最低的下界,例如一个叶子节点的实际最低下界应该为min(1,dn[i])

同理对一个父亲节点的实际最低下界应该是 ∑min(dn[son],least_dn[son]),最后加上1(自己)


最后跑完dfs,遍历每个节点判断            if (up[i]<dn[i]||least_dn[i]>up[i])  则表明信息冲突,lie,否则true

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值