树形DP题目(二)

Hdu 2196 http://acm.hdu.edu.cn/showproblem.php?pid=2196
【题意】:给出一棵树,叫你求离这个节点最远的点的距离,输入中给出每两个点间的距离

【解法】:很明显的树dp,也相对比较简单,只要求两次dfs即可,第一次dfs的时候就
把该无向图变成有向图,并且求出该节点到最远儿子的距离保存在h[i]中

第二次求dfs的时候就求出他的父亲节点不要当前节点经过这条路的时候所能到达
最远距离即f[i]

hdu1561 http://acm.hdu.edu.cn/showproblem.php?pid=1561
第一个真正意义上的树形DP+01背包
【算法】:
用数组dp[i][j]表示以i为根节点,取了j-1个节点的最大价值是多少

假如取i这个点必须先取j这个点那么就从j连一条边到i,这样儿子取的话,父亲就必须取

由于这道题不是只有一棵树是一个森林,所以就把所有的树连到节点为0的点构成
实际意义上的一棵树

这样dp[i][j]=max(dp[i1][j1]+dp[i2][j2]+....+dp[ik][jk])+b[i]
并且j1+j2+...+jk=j-1,看到这条式子是不是想到了背包呢?对,就是用背包
j就是容量


poj3345 http://acm.pku.edu.cn/JudgeOnline/problem?id=3345
【题意】:
题意:一共有n(<=200)个国家, 你想要用收买m(<=m)个国家,其中收买国家i的代价
是v[ i ]。但是有些国家有拥属关系,如果A拥属B国,就是买通了A也意味着买通了B,
而且这些关系是传递的。求最少需要付出的代价。

【算法】:其实这道题挺简单的,就只是套用背包就行树dp就好了,只是输入超级恶心
搞到我头晕
这道题要注意的就是它可能是森林,照样的把入度为的连到节点那里去,并且节点
的价值为无穷,保证不会取到节点,再从进行一次dfs+背包就行了
zju3201 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3201
【题意】:还是给出一棵树,叫你找出一棵子树的节点数为k的,而且value值最大的

【做法】:还是很老套的就直接树dp+背包,不多说了,都一样的代码


poj1655 http://acm.pku.edu.cn/JudgeOnline/problem?id=1655

题意:给你一棵树,去掉一个结点之后,得到的值是分开的所有子树中的个
数的最大值,要求去掉哪个结点,值最小
算法:dfs,递归过程中,统计孩子结点所有值的总数,
然后n-sum就是另一半的值,这个跟所有孩子结点中的最大值对比,取最大那个,
一次dfs就可以把所有值统计出来了,最后找最小那个就可以了


poj3140 http://acm.pku.edu.cn/JudgeOnline/problem?id=3140
题意:给你一棵树,每个结点都有一个权值,要你求删除一条边之后,分成的两棵树的权值之差最小
算法:标准算法应该是树型DP,但是这道题目也可以用一次dfs就可以了,复杂度是O(n)
为什么是O(n)就可以呢,因为对于一棵数,先枚举删除父亲跟子树的那条边,然后求出子树的所有权值之和,
用sum-cnt[v]就可以求出剩下一半的那棵树的权值之和了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值