树形dp
GoLakerswxy
这个作者很懒,什么都没留下…
展开
-
牛客网多校2 travel(树形dp)
题目:给你一棵你个点的树,每个点有一个价值,选出三条不相交的链使得最后的总价值最大。显然是树形dp,我定义了一个三维的dp[i][j][k](i为子树id,j为选择了几条链,k为选择的j条链中是否包含了经过i点的直链)(0<=j<=3,0<=k<=1)。昨晚写这个题的时候一直就是过48%的数据,真是烦啊,今天发现定义一个全局变量的数组,里面递归时出错,真是无语了。改...原创 2018-07-22 13:03:24 · 416 阅读 · 0 评论 -
POJ - 1155 TELE (树形dp+背包)
题目链接点击打开链接题意:给定一棵树,1为根结点表示电视台,有m个叶子节点表示客户,有n-m-1个中间节点表示中转站,每条树边有权值。现在要在电视台播放一场比赛,每个客户愿意花费cost[i]的钱观看,而从电视台到每个客户也都有个费用,并且经过一条边只会产生一个费用。问电视台不亏损的情况最多有几个客户可以看到比赛?我把边权放到相连的子节点当变成点权存负值,dp[i][j]表示i这个节点要j...原创 2018-07-16 10:16:39 · 157 阅读 · 0 评论 -
HDU - 2196(树形dp)
给出一颗树,求树中的每个顶点到其他所有顶点距离的最大值。经典树形dp#include <bits/stdc++.h>using namespace std;const int maxn=1e4+100;int n,dp[maxn],dpf[maxn],f[maxn][3];//dp为孩子节点到这个点的最远距离,dpf为父节点到这个节点的最远距离,最后取maxstru...原创 2018-06-05 20:46:20 · 600 阅读 · 0 评论 -
POJ-2152 树形dp
题意:给你一颗树,边上权值表示距离,一个点上可以建消防站,花费为val[i],一个节点要么建消防站,要么周围d[i]距离内必须有一个消防站,求最小花费。想了好久没想到,看了一眼题解才恍然大悟。我真的是太菜了!题解:设ans[u]为以u为根的这棵子树的答案,dp[u][v]表示u节点被v保护的答案,dis[v]表示u到v的距离。若v可以保护u,则dp[u][v]=val[v]+∑min(dp...原创 2018-07-06 11:52:37 · 376 阅读 · 0 评论 -
POJ - 3162Walking Race(树形dp+单调队列)
题意:给一棵n个结点边带权的树,记结点i到其他结点最远距离为d[i]。问d数组构成的这个序列中满足其中最大值与最小值的差不超过m的连续子序列最长是多长。用树形dp来求树中的每个顶点到其他所有顶点距离的最大值。然后用单调队列求满足max-min<=m的连续子序列最长是多长。//#include <bits/stdc++.h>#include<iostream&...原创 2018-07-15 14:10:01 · 227 阅读 · 0 评论 -
CodeForce-219D Choosing Capital for Treeland(树形dp)
题目:给出一棵树,但是它的边是有向边,选择一个城市,问最少调整多少条边的方向能使一个选中城市可以到达所有的点,输出最小的调整的边数,和对应的点。(题意是copy别人的来的,自己说的太绕了)树形dp,dp[u]表示从u走到其所有的子节点需要的调整数,dpf[u]表示往父节点走需要的调整数,dp[u]+dpf[u]便是所有的调整数。dp[u]比较好求,dpf[u]+=dpf[father]; ...原创 2018-07-15 15:56:56 · 146 阅读 · 0 评论 -
HDU - 1011Starship Troopers (树形dp+背包)
题目:带领m个士兵,存在n个房间(n-1条通路,1号房间为起点);每个房间有两个参数:bugs数以及价值。每个士兵可以抵抗20个bugs,参与抵抗的士兵不继续往下走,只有消灭房间中的所有bugs,才可以得到该房间的价值。要到达下一个房间,必须先将当前房间的bugs全部消除;并且走过的房间就不再到达。问有m个士兵的情况下,怎样使最后得到的价值最大,最大为多少?f(i, j) = max {...原创 2018-07-16 19:57:17 · 162 阅读 · 0 评论 -
HDU - 3586 Information Disturbing(树形dp+二分)
题目:给定n个敌方据点,1为司令部,其他点各有一条边相连构成一棵树,每条边都有一个权值cost表示破坏这条边的费用,叶子节点为前线。现要切断前线和司令部的联系,每次切断边的费用不能超过上限limit,问切断所有前线与司令部联系所花费的总费用少于m时的最小limit。(1<=n<=1000,1<=m<=1e6)二分limit,dp[u]表示去除了子树u的所有叶节点的最小花...原创 2018-07-16 21:56:41 · 156 阅读 · 0 评论 -
The 2018 ACM-ICPC CCPC宁夏 G-Factories(树形dp+背包)
题目:给你n个城市,n-1条道路,每两个城市仅有一条通路,即一个树形结构。让你选择m个叶子节点建立工厂,使得最终任意两个工厂之间距离的累加和最小。思路:考虑点之间的关系很繁琐,所以我想的是对于一条边来说考虑经过了它多少次。dp[u][i]表示u节点为根的子树上选择了i个叶子节点,会经过u这个子树的边的权值和的最优值。转移方程如下:dp[u][i]=min( dp[u][i-j]+dp[v]...原创 2018-07-17 19:35:38 · 2202 阅读 · 0 评论 -
POJ - 3107 Godfather(树形dp,找树的重心)
题目:就是找树的重心,可能存在多个,按编号从小到大输出。一个水题,但是好几个罚时....不能用vector存边,会TLE.#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>using namespace...原创 2018-07-17 20:16:31 · 237 阅读 · 0 评论 -
HDU - 4219 Randomization?(树形dp,概率)
题目:给你一棵n个节点的树(n<=64),每条边都会随机的从0~L中间取一个边权值(L<=8),求问生成的树任意两点间距离不超过S(S<=512)的概率是多少?最后还是看了别人的思路,我好菜。。。dp[u][i] 表示以u为子树,子树上两两节点距离不超过 s,且根到叶子节点的最长长度为 i 的概率。有了这个思路就都好说了。最后求得的就是 sigma(dp[1][i]) (...原创 2018-07-19 00:43:50 · 291 阅读 · 0 评论 -
POJ - 1947Rebuilding Roads(树形dp)
题目 给你n个节点的一颗树,问你最少切断几条边使得能独立出一个节点数为m的子树。dp[i][j]表示生成一个以i为根有j个节点的子树需要切断的最少的边数#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>...原创 2018-07-16 12:36:35 · 141 阅读 · 0 评论