
动态规划-树形dp
文章平均质量分 61
JeraKrs
本人目前就职于百度商业研发部,有需要内推的朋友简历可发我邮箱 jerakrs@qq.com
展开
-
uva 1292 - Strategic game(树形dp)
题目链接:uva 1292 - Strategic game题目大意:给出一张无向图,可以在每个点上放置士兵,放置士兵的点可以看守该点的所有边,问说要看守所有的边最少要放几个士兵。解题思路:dp[i][0]表示说该店不放士兵的最优解,dp[i][1]表示说该点放置士兵的最优解。如果一条边的一个端点没有放置士兵,则另外一边必须放。#include #includ原创 2014-02-23 17:02:14 · 1668 阅读 · 0 评论 -
hdu 4799 LIKE vs CANDLE(树形dp)
题目链接:hdu 4799 LIKE vs CANDLE解题思路dp[i][0]表示第i个节点不翻转的最优解,dp[i][1]表示翻转的最优解,每个位置翻转的代价到其父亲节点的位置再计算。代码#include <cstdio>#include <cstring>#include <cmath>#include <vector>#include <algorithm>using namespa原创 2015-11-14 21:08:49 · 728 阅读 · 0 评论 -
hdu 4616 Game(树形dp)
题目链接:hdu 4616 Game解题思路dp维护不以trap为起点的最优,ed维护以trap为起点的最优。注意,当前节点如果不为trap的话,不能从dp[K]转移过来。代码#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 50005;typedef lon原创 2015-10-26 21:42:40 · 731 阅读 · 0 评论 -
hdu 4679 Terrorist’s destroy(树形dp)
题目链接:hdu 4679 Terrorist’s destroy代码#pragma comment(linker, "/STACK:102400000,102400000")#include <cstdio>#include <cstring>#include <queue>#include <vector>#include <algorithm>using namespace std;原创 2015-11-09 20:29:41 · 636 阅读 · 0 评论 -
hdu 4661 Message Passing(树形dp)
题目链接:hdu 4661 Message Passing解题思路考虑以每个位置为第一个汇总的点,即根节点。然后类似村名排队的计数。代码#include <cstdio>#include <cstring>#include <vector>#include <algorithm>using namespace std;typedef long long ll;const int mod =原创 2015-11-06 21:34:06 · 666 阅读 · 0 评论 -
hdu 5290 Bombing plan(树形dp)
题目链接:hdu 5290 Bombing plandpDestroy[u][i]表示以u为根节点的子树全部被摧毁,并且向上还可以破坏到距离u为i的城市;dpSafe[u][i]表示以u为根节点的子树中有距离u深度为i的城市还未被破坏。dpDestroy[u][i] = dpDestroy[v][i+1] + sum{ min(dpDestroy[k][j], dpSafe[k][原创 2015-07-31 21:11:14 · 1339 阅读 · 0 评论 -
hdu 5379 Mahjong tree(树形dp)
题目链接:hdu 5379 Mahjong tree树形dp,每个节点最多有2个子节点为一棵节点数大于1的子树的根节点,而且要么后代的节点值都大于,要么都小于本身(所以tson不为0是,要乘2)。对于K个单一节点的子节点,种类数即为全排K!。当一个节点没有兄弟节点时,以这个节点为根结点的子树,根可以选择最大或者最小。#pragma comment(linker, "/STA原创 2015-08-12 23:13:37 · 784 阅读 · 0 评论 -
hdu 5325 Crazy Bobo(树形dp)
题目链接:hdu 5324 Crazy Bobo对于每个点,C[u]表示以u为中点(即w[u]为最小值)的满足子树,点的个数最多个数。每次一个点先优处理处C[u]。再递归向下处理。#pragma comment(linker, "/STACK:102400000,102400000")#include #include #include #include usi原创 2015-07-28 21:03:25 · 983 阅读 · 1 评论 -
hdu 5293 Tree chain problem(树链剖分+树形dp)
题目链接:hdu 5293 Tree chain problem维护dp[u], sum[u],dp[u]表示以u为根节点的子树的最优值。sum[u]表示以u节点的所有子节点的dp[v]之和。对于边a,b,w,在LCA(a,b)节点的时候进行考虑。dp[u] = min{dp[u], Sum(a,b) - Dp(a,b) + sum[u] | (ab链上的点,不包括u }#原创 2015-07-31 21:37:10 · 1335 阅读 · 0 评论 -
hdu 5148 Cities(树形dp)
题目链接:hdu 5148 Citiesdp[i][j]表示以i为根节点,选j个最优值,每条边被选中的时候就计算出被经过的次数,并乘上权值。#include #include #include #include using namespace std;typedef pair pii;typedef long long ll;const int maxn = 20原创 2015-01-03 21:58:51 · 1208 阅读 · 0 评论 -
hdu 4123 Bob’s Race(树形dp+RMQ)
题目链接:hdu 4123 Bob’s Race题目大意:一个城镇有N个住户,N-1条路连接两个住户,保证N个住户联通,M次询问,给定N条边的信息,包括连接的住户序号以及路的长度。然后是M次询问,每次询问Q,要求找到最长的连续序号,使得Max(dis[i]) - Min(dis[i]) ≤ Q(l≤i≤r),输出最大的r-l+1。dis[i]为从第i个住户出发,不重复走过路原创 2014-10-28 16:10:29 · 1290 阅读 · 0 评论 -
Codeforces 461B Appleman and Tree(树形dp)
题目链接:Codeforces 461B Appleman and Tree题目大意:一棵树,以0节点为根节点,给定每个节点的父亲节点,以及每个点的颜色(0表示白色,1表示黑色),切断这棵树的k条边,使得树变成k+1个联通分量,保证每个联通分量有且仅有1个黑色节点。问有多少种分割方法。解题思路:树形dp,dp[i][0]和dp[i][1]分别表示子树一下的分割方法中,i节点所在联通原创 2014-08-31 11:49:16 · 1936 阅读 · 0 评论 -
uva 11307 - Alternative Arborescence(树形dp)
题目链接:uva 11307 - Alternative Arborescence题目大意:给出一棵树,然后在每个节点上填上任意的数字,要求相邻的节点不能填相同的数字,问说所有节点数字的和最小为多少。解题思路:这题读入部分有点坑爹,其他都还好,dp[i][j]表示节点i填j的情况。#include #include #include using原创 2014-03-27 07:55:03 · 1717 阅读 · 0 评论 -
uva 1484 - Alice and Bob's Trip(树形dp)
题目链接:uva 1484 - Alice and Bob's Trip题目大意:Alice和Bob小两口一起出去旅行,他们从0城市出发,Bob喜欢走比较远的路,因为他是个勤奋的好孩子,Alice喜欢走比较近的路,因为她是一个不勤奋的坏孩子,所以有了意见上的分歧,于是乎在出门前他们约法三章,要求说最后的距离值在[l,r]之间,并且由夫妻两轮流做决定,决定说下一个城市去哪里。现在给出n个原创 2014-05-05 12:56:29 · 1565 阅读 · 0 评论 -
uva 12223 - Moving to Nuremberg(树形dp)
题目链接:uva 12223 - Moving to Nuremberg题目大意:给出n,表示有n个位置,n个位置有n-1条边,形成一个无根的树,每条边上都有权值。现在每个位置都有一个景点,一个人想在一年之内去ki次景点,所以接下来给出m,表示说在m个位置上有这个人想去的地方,给出位置以及想去的次数(注意,每去一个景点都要返回自己的住处),然后问说,这个人该住在哪里走的路程才最短。原创 2014-03-16 22:05:42 · 1830 阅读 · 0 评论 -
uva 10859 - Placing Lampposts(树形dp)
题目链接:uva 10859 - Placing Lampposts题目大意:给定一个无向无环图,要求在点上放灯,如果某一点上放了等,则可以照亮与它相通的边,现在要求放尽量少得等,使得所有边都被照亮,并且输出灯数,被照亮两次的边数(即边的两个端点均放置灯),被照亮一次的边。 如果等数一样的话,按照被照亮一次边越大的方案。解题思路:树形dp,每次枚举某个顶点作为根,对于每个点原创 2014-02-17 23:29:20 · 1661 阅读 · 0 评论 -
uva 1407 - Caves(树形dp)
题目链接:uva 1407 - Caves题目大意:给出n,表示有一个以0为根含有n个节点的树,每条边有一个权值,现在给出m次询问,每次询问有一个val值,要求计算在val值下的距离最多能经过多少个节点,一个节点多次移动多算一次。解题思路:dp[u][i]表示说以u为根,经过i个节点的最短距离,第三维有0和1两种状态,0是经过i个节点后要不用返回u,1是需要返回。这样就有(原创 2014-02-25 21:34:13 · 1872 阅读 · 0 评论 -
hdu 5593 ZYB's Tree(树形dp)
题目链接:hdu 5593 ZYB’s Tree代码#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 500005;int N, K, E, first[maxn], jump[maxn], linker[maxn];int ans, dp[maxn][15]原创 2015-12-26 22:21:49 · 1057 阅读 · 0 评论