|---树形dp
文章平均质量分 56
Spylft
这个作者很懒,什么都没留下…
展开
-
SRM 570 DIV2 1000 CentaurCompany
Task给你一棵树,求在割去任意条边后,剩下的联通块的个数总和(全空也算是一个),也就是指那些使集内的点能只通过集内的点到达任意一个集内的点的点集.(点数<=50)Solution:我们把这个问题剖分成对于一棵树,在包含它的根时,有多少个这样的点集.那么在不包含它的情况可以递归下去求解. 那么只需要递归地求出儿子的解,然后在父亲上跑一个背包就好了.vector<int>edge[M]; LL an原创 2016-09-13 16:29:16 · 448 阅读 · 0 评论 -
USACO2014Open Gold Code Breaking
Task: The cows keep getting in trouble by taking rides on Farmer John’s tractor, so he has hidden the keys to the tractor in a fancy new safe in his office. Undeterred, the cows have vowed to原创 2016-09-19 14:37:39 · 912 阅读 · 0 评论 -
POI2014FarmCraft
大意: 就是给你一棵树,然后树上有n个节点,每条边的边权为1,然后每个节点有一个延时t,当你走过这个节点后,过了t时间之后,这个节点就被加入到已经经过的点的集合中,然后从1节点出发,在1节点结束,且1节点的计时只会在最后一次到1节点的时候开始. 求最少时间,能够经过所有的点. 这道题的话,感觉就是一个状态定义出来后就只剩下码代码的树形dp了吧…那就开始定义状态.我们定义dp[i]原创 2016-11-08 16:36:01 · 611 阅读 · 0 评论 -
POI2014 Ant colony
很显然的一个想法就是通过有食蚁兽的那一条边把整棵树分成两棵树.这样就可以两边乱搞了 对于一棵子树,我们现在存一下现在的上界r和下界l,遇到一个度为k的节点,分开之后它的上界和下界会变成[l∗k,(r+1)∗k−1][l*k,(r+1)*k-1]. 然后遇到叶子节点的时候,我们在原序列中询问[l,r][l,r]之间的数有多少个就行了,只用把原序列排个序,二分一下就行了.#include<cstdio>原创 2016-11-11 11:04:41 · 448 阅读 · 0 评论