---------树形dp
文章平均质量分 74
Stayaccept
这个作者很懒,什么都没留下…
展开
-
hdu1561(树形dp)
链接:点击打开链接题意:在一个地图上,有N座城堡,每座城堡都有一定的宝物,每次游戏允许攻克M个城堡并获得里面的宝物.但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先攻克其他某一个特定的城堡,输入2个整数,N,M,在接下来的N行里,每行包括2个整数a,b,在第i行,a代表要攻克第i个城堡必须先攻克第a个城堡,如果a=0则代表可以直接攻克第i个城堡.b代表第i个城堡的宝物数量,输出攻原创 2016-02-29 23:40:10 · 795 阅读 · 0 评论 -
Codeforce 337D(树的直径变形)
链接:点击打开链接题意:在一个n个点的树中,给出m个点,问这颗树中距离这m个点的距离小于等于d的点的个数代码:#include #include #include #include #include #include using namespace std;const int INF=0x3f3f3f3f;struct node{ int to,cost;原创 2016-06-30 15:30:18 · 724 阅读 · 0 评论 -
hdu5416(树形dp)
链接:点击打开链接题意:给出一颗树,求有多少对点之间边的异或值为d代码:#include #include #include #include #include #include using namespace std;struct node{ int to,cost;};vector G[100005];int dp[100005],vis[100005];原创 2016-07-12 16:58:25 · 462 阅读 · 0 评论 -
hdu5723(树形dp+最小生成树)
链接:点击打开链接题意:在最小生成树的基础上求出任意两点间距离的期望代码:#include #include #include #include #include #include using namespace std;const long long SIZE=100005;long long n,dp[SIZE],num[SIZE],used[SIZE];struct原创 2016-07-20 11:29:24 · 797 阅读 · 0 评论 -
hdu4607(树的直径+公式)
链接:点击打开链接题意:给出一棵树,求从一点出发,访问k个点走过的最少边数代码:#include #include #include #include #include #include using namespace std;struct node{ int to,cost;};vector G[200005];int n,dp[200005],vis[200原创 2016-07-27 10:50:47 · 1025 阅读 · 0 评论 -
hdu4705(树形dp)
链接:点击打开链接题意:求一个树上不在一条路径上的三元组的种数代码:#include #include #include #include #include #include using namespace std;long long n,dp[100005],vis[100005];long long ans;vector G[100005];void dfs(lon原创 2016-07-31 09:35:47 · 506 阅读 · 0 评论 -
hdu3899(树形dp)
链接:点击打开链接题意:给出一棵树每个点的权值和每条边的长度,点j到点i的代价为点j的权值乘以连接i和j的边的长度,输出点x,使得所有点到x点的代价最小代码:#pragma comment(linker, "/STACK:102400000,102400000")#include #include #include #include #include #include usi原创 2016-07-31 17:08:22 · 637 阅读 · 0 评论 -
uva10859(树形dp)
链接:点击打开链接题意:给一个N个点M条边的无向无环图,每个节点都可以放灯。每盏灯将照亮以它为一个端点的所有边,在所有边都被照亮的前提下使得被两盏灯照亮的边的总数尽可能多,求灯的总数最小值,被两盏灯同时被照亮的边数和被一盏灯照亮的边数代码:#include #include #include #include #include #include using namespace原创 2016-08-06 20:33:03 · 797 阅读 · 0 评论 -
UVALive2038(树形dp)
链接:点击打开链接题意:给出一棵树,求在代码:#include #include #include #include #include #include using namespace std;int dp[2005][2],vis[2005];vector G[2005];void dfs(int s){ /原创 2016-08-12 20:09:24 · 418 阅读 · 0 评论 -
UVALive4015(树形dp)
链接:点击打开链接题意:给一棵树,每条边有边权,有Q次询问,求从根节点出发,走不超过x单位距离,最多经过多少个点代码:#include #include #include #include #include #include using namespace std;const int INF=0x3f3f3f3f;struct node{ int to,cost;原创 2016-08-15 10:24:32 · 452 阅读 · 0 评论 -
bzoj3743(树形dp)
链接:点击打开链接题意:一颗树n个点,n-1条边,经过每条边都要花费一定的时间,任意两个点都是联通的。有K个人(分布在K个不同的点)要集中到一个点举行聚会。聚会结束后需要一辆车从举行聚会的这点出发,把这K个人分别送回去。请你回答,对于i=1~n,如果在第i个点举行聚会,司机最少需要多少时间把K个人都送回家。代码:#include #include #include #include原创 2016-08-17 10:49:35 · 567 阅读 · 0 评论 -
vijos p1642(树形dp优化)
链接:点击打开链接题意:有一个含有n个节点的树,给出每个节点的权值,对于每个节点来说,只有选择当前节点的父节点才能选择当前节点,问选择不超过m个节点的最大权值和代码1:#include #include #include #include #include #include using namespace std;const long long INF=0x3f3f3f3f3原创 2016-09-29 21:09:24 · 480 阅读 · 0 评论 -
Codeforce 486D(树形dp)
链接:点击打开链接题意:给出一个n个点的树,给出每个点的权值,问存在多少个集合,使得集合中两两可以互相到达,并且最大值减去最小值小于等于d代码:#include #include #include #include #include #include #include using namespace std;const long long MOD=1000000007;l原创 2016-11-06 20:35:22 · 481 阅读 · 0 评论 -
Codeforce 490E(树形dp)
链接:点击打开链接题意:求树上的最长上升子序列长度代码:#include #include #include #include #include #include using namespace std;const int INF=0x3f3f3f3f;vector G[6005];int n,dp[6005],ans[6005],val[6005];void dfs(原创 2016-11-01 16:51:20 · 425 阅读 · 0 评论 -
poj2057(树形dp)
链接:点击打开链接题意:给出一个n个节点的树,现在你站在根节点,有一个物品等概率的出现在叶子节点。现在你要确定一条搜索的距离,使得当物品等概率出现在各个叶子节点时,从根节点出发按照确定的路径找到物品的距离的期望最小,并输出最小的期望,原题中有样例解释代码:#include #include #include #include #include #include #include原创 2017-09-08 18:39:47 · 360 阅读 · 0 评论 -
hdu4756(最小生成树最佳替换边)
链接:点击打开链接题意:给出n个点要求依次删除最小生成树上的边后,求出每次删边后的最小生成树的最大值代码:#include #include #include #include #include #include using namespace std;const int INF=0x3f3f3f3f;int son[1005],dfs_sort[1005],dfs_num原创 2016-06-27 20:12:45 · 1225 阅读 · 0 评论 -
hdu4126(最小生成树最佳替换边)
链接:点击打开链接题意:给出一个无向图,有q次询问,每次更改一条边的距离,求出,每次更改后的最小生成树的平均值代码:#include #include #include #include #include using namespace std;const int INF=0x3f3f3f3f;int son[5005],dfs_sort[5005],dfs_num[5005原创 2016-06-26 19:52:07 · 1169 阅读 · 0 评论 -
hdu4616(树形dp)
链接:点击打开链接题意:给出一个树上每个节点的权值和是否有陷阱,最多能遇到m个陷阱,当遇到第m个陷阱时必须停下来,求获得的最大权值使多少代码:#include #include #include #include #include #include using namespace std;vector G[50005];int n,m,ans;int dp[50005][原创 2016-06-15 14:19:59 · 549 阅读 · 0 评论 -
poj2342&&hdu1520(树形dp)
链接:点击打开链接题意:一个公司要组织一个派对,每个人有一个愉悦值,给出n个人每个人的愉悦值以及他们他们的直接上司,要求每一个人不能喝他自己的直接上司同时出现,输出愉悦值和的最大值代码:#include #include #include #include #include #include using namespace std;int n;int f原创 2016-02-29 23:46:41 · 455 阅读 · 0 评论 -
hdu2196(树的直径)
链接:点击打开链接题意:求一棵树中每个节点距离其它节点的最大距离代码1:#include <vector>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>usi...原创 2016-03-06 15:59:34 · 547 阅读 · 0 评论 -
51nod1405(树形dp)
链接:点击打开链接题意:给定一棵无根树,假设它有n个节点,节点编号从1到n, 求任意两点之间的距离(最短路径)之和代码:#pragma comment(linker, "/STACK:102400000,102400000")#include #include #include #include #include #include using namespa原创 2016-03-09 14:46:46 · 491 阅读 · 0 评论 -
Codeforce 219D(树形dp)
链接:点击打开链接题意:由n各节点组成的有向树,要求选一个点作为首都,通过反转一些边使得任何一个点都能到达首都,输出反转的最少次数和可能成为首都的节点编号代码:#include #include #include #include #include #include using namespace std;const int SIZE=200005;co原创 2016-03-09 14:54:39 · 341 阅读 · 0 评论 -
poj1155(树形dp)
链接:点击打开链接题意:有1个电视台,N-M-1个中转站,M个用户,电视台可以通过一些线路将信号传输到用户手中,给出每条线路的费用和每个用户可以支付的金额,输出在电视台不会产生亏损的同时能够给多少用户传输信号代码:#include #include #include #include #include #include using namespace std;原创 2016-03-09 15:02:02 · 476 阅读 · 0 评论 -
hdu1011(树形dp)
链接:点击打开链接题意:有n个节点组成一棵树,有m个士兵,必须从1号房间开始攻打,每个洞防御值1价值b,一个士兵只能产生20的伤害,为了拿到这个节点的价值,必须留下一些士兵消灭这个洞的防御值(并且留下的士兵不可以再去攻打其他节点,并且必须攻打了父节点才可以攻打子节点),问这m个士兵可以得到的最大价值是多少代码:#include #include #include #incl原创 2016-03-11 09:03:09 · 574 阅读 · 0 评论 -
vijos p1144(树形dp)
链接:点击打开链接题意:在一棵树上,给出每个节点放一个守卫的费用,一个守卫可以保护它所放节点经过一条边所连的所有节点,为保护所有节点的最小费用是多少代码:#include #include #include #include #include #include using namespace std;const int INF=0x3f3f3f3f;vector G[200原创 2016-09-02 15:38:21 · 355 阅读 · 0 评论 -
poj1947(树形dp)
链接:点击打开链接题意:给出一个n个节点组成的树,问最少删除几条边可以孤立出一个含有m个节点的树代码:#include #include #include #include #include #include using namespace std;const int INF=0x3f3f3f3f;int n,p;int dp[205][205],n原创 2016-03-11 09:11:48 · 411 阅读 · 0 评论 -
hdu4003(树形dp)
链接:点击打开链接题意:一棵N个节点的树,每条边都有一个权值,K个机器人从S点出发,问让机器人遍历所有边,最少花费值是多少代码:#include #include #include #include #include #include using namespace std;int N,S,K;int dp[10005][15],used[10005];原创 2016-03-11 09:17:41 · 422 阅读 · 0 评论 -
hdu4123(树的直径+ST算法)
链接:点击打开链接题意:给出一棵树,标号1~n,每条边都有边权,数组num[i]为树上标号为i的点到其他点的最大距离,然后有一些询问,每个询问输入一个整数m,求num数组中最大值与最小值绝对值之差不超过m的最长的连续区间的大小是多少代码:#include #include #include #include #include #include using nam原创 2016-04-02 18:54:25 · 913 阅读 · 0 评论 -
Codeforce 581F(树形dp)
链接:点击打开链接题意:给出一个树,要求最少删除多少条边使叶子节点恰好平分代码:#include #include #include #include #include #include using namespace std;const int INF=0x3f3f3f3f;int n,p;int dp[5005][5005],num[5005],原创 2016-04-03 20:57:09 · 477 阅读 · 0 评论 -
hdu3586(树形dp+二分)
链接:点击打开链接题意:根节点为1的一棵树,删除一些边使叶子节点都不能到达根节点,并且边权和不能大于M,使删除边的最大值最小,并输出代码:#include #include #include #include #include #include using namespace std;const int INF=1100000;struct node{原创 2016-04-07 21:07:07 · 1075 阅读 · 0 评论 -
poj1655(树的重心)
链接:点击打开链接题意:去掉树中的一个节点使得剩余子树中节点数最大值最小,也就是求树的重心代码:#include <map>#include <set>#include <queue>#include <string>#include <math.h>#include <vector>#include...原创 2016-06-12 13:31:33 · 613 阅读 · 0 评论 -
hdu4714(树形dp)
链接:点击打开链接题意:给出一棵树,删除一条边或者加入一条边的代价都是1,蚊最后使n个节点连成环所需的最小代价代码:#pragma comment(linker,"/STACK:1024000000,1024000000")#include #include #include #include #include #include using namespace std;ve原创 2016-06-13 14:40:50 · 767 阅读 · 1 评论 -
poj2486(树形dp)
链接:点击打开链接题意:给出一棵树,没个节点有一个权值,求从节点1出发,最多走k步所得权值最大和代码:#include #include #include #include using namespace std;int n,m,a[105],dp[105][205][2];vector G[105];void dfs(int s,int fa){ int i,j,k原创 2017-09-17 18:19:12 · 291 阅读 · 0 评论