ZOJ3626(树形dp)

时间:2023-01-01 16:11:56

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4772

题意:给一棵有n个结点的树,每个点有点权表示在这个点上的价值,每条边有边权表示走这条路所需要的时间,给一个时间m,问在时间m从点k出发再回到点k所能得到的最大的价值和。

分析:因为走完后还要求回到源点k,这题状态转移比poj2486简单了许多。

设dp[u][j]表示从u点出发走了j步再回到u点获得的最大值。则dp[u][j+2*w]=max(dp[u][j+2*w],dp[u][j-k]+dp[v][k]).

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 1000000007
#define inf 0x3f3f3f3f
#define N 1010
#define clr(a) (memset(a,0,sizeof(a)))
using namespace std;
struct edge
{
int v,w,next;
edge(){}
edge(int v,int w,int next):v(v),w(w),next(next){}
}e[*N];
int head[N],dp[N][N],val[N],tot,n,m;
void addedge(int u,int v,int w)
{
e[tot]=edge(v,w,head[u]);
head[u]=tot++;
}
void dfs(int u,int fa)
{
for(int i=;i<=m;i++)dp[u][i]=val[u];
for(int i=head[u];~i;i=e[i].next)
{
int v=e[i].v,w=e[i].w;
if(v==fa)continue;
dfs(v,u);
for(int j=m;j>=;j--)
for(int k=;k<=j;k++)
{
dp[u][j+*w]=max(dp[u][j+*w],dp[u][j-k]+dp[v][k]);
}
}
}
int main()
{
int u,v,w,x,k;
while(scanf("%d",&n)>)
{
memset(head,-,sizeof(head));
clr(dp);tot=;
for(int i=;i<=n;i++)scanf("%d",&val[i]);
for(int i=;i<n;i++)
{
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
addedge(v,u,w);
}
scanf("%d%d",&k,&m);
dfs(k,-);
printf("%d\n",dp[k][m]);
}
}

ZOJ3626(树形dp)的更多相关文章

  1. zoj-3626 Treasure Hunt I (树形dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接: zoj-3626 题意 给一棵n个节点的树, 节点编号1~n, 每个节点有权值val[i],经过这个节点就可 ...

  2. poj3417 LCA &plus; 树形dp

    Network Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4478   Accepted: 1292 Descripti ...

  3. COGS 2532&period; &lbrack;HZOI 2016&rsqb;树之美 树形dp

    可以发现这道题的数据范围有些奇怪,为毛n辣么大,而k只有10 我们从树形dp的角度来考虑这个问题. 如果我们设f[x][k]表示与x距离为k的点的数量,那么我们可以O(1)回答一个询问 可是这样的话d ...

  4. 【BZOJ-4726】Sabota? 树形DP

    4726: [POI2017]Sabota? Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 128  Solved ...

  5. 树形DP&plus;DFS序&plus;树状数组 HDOJ 5293 Tree chain problem(树链问题)

    题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...

  6. 树形DP

    切题ing!!!!! HDU  2196 Anniversary party 经典树形DP,以前写的太搓了,终于学会简单写法了.... #include <iostream> #inclu ...

  7. BZOJ 2286 消耗战 &lpar;虚树&plus;树形DP&rpar;

    给出一个n节点的无向树,每条边都有一个边权,给出m个询问,每个询问询问ki个点,问切掉一些边后使得这些顶点无法与顶点1连接.最少的边权和是多少.(n<=250000,sigma(ki)<= ...

  8. POJ2342 树形dp

    原题:http://poj.org/problem?id=2342 树形dp入门题. 我们让dp[i][0]表示第i个人不去,dp[i][1]表示第i个人去 ,根据题意我们可以很容易的得到如下递推公式 ...

  9. hdu1561 The more&comma; The Better &lpar;树形dp&plus;背包&rpar;

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1561 思路:树形dp+01背包 //看注释可以懂 用vector建树更简单. 代码: #i ...

随机推荐

  1. Angular2学习笔记——NgModule

    在Angular2中一个Module指的是使用@NgModule修饰的class.@NgModule利用一个元数据对象来告诉Angular如何去编译和运行代码.一个模块内部可以包含组件.指令.管道,并 ...

  2. 简单介绍MR21和MR22

    MR21和MR22都可以用来调整价格,MR21是更改的单个物料的价格,MR22更改的是库存总价值,所以MR21可以更改移动平均价(V)或标准价(S)的物料价格.MR22只能更改移动平均价(V)的物料价 ...

  3. SlickGrid example 3a&colon; 可编辑单元

    可编辑单元支持一列展示多个属性域,可以为编辑单元提供验证,并且自定义验证事件.   代码: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 T ...

  4. request的生命周期

    有如下功能: 从index.jsp页面点击超链接进入TestServlet服务器,TestServlet服务器再请求转发到test.jsp. 在index.jsp里设置了request的attribu ...

  5. pom&period;xml配置详解

    <!--可以免费转载,转载时请注明出处  http://pengqb.iteye.com .--><project xmlns="http://maven.apache.o ...

  6. Linux2&period;6内核--抢占

    [摘要]本文首先介绍非抢占式内核(Non-Preemptive Kernel)和可抢占式内核(Preemptive Kernel)的区别.接着分析Linux下有两种抢占:用户态抢占(User Pree ...

  7. UVA11922 Permutation Transformer

    思路 直接使用FHQ Treap维护即可 代码 #include <cstdio> #include <cstring> #include <algorithm> ...

  8. asp&period;net 虹软 人脸识别 实现刷脸住宿、刷脸签到、刷脸进入等

    先看看效果图,我把demo改成自动运行了,暂时借用别人的图片: 最左侧的大图为选择上传的, 中间的小图是大图的脸, 右侧的大图是人脸文件夹中已经存在的,并且相似度较高的一张脸,也就是比对的结果. 先记 ...

  9. oracle插入数据的时候报错:ORA-00928&colon; 缺失 SELECT 关键字

    比如:插入数据的时候是这样的insert into a value('哈哈'); 报的是这样的错误:ORA-00928: 缺失 SELECT 关键字 其实就是value少了一个s,在oracle中,插 ...

  10. Django&plus;Uwsgi&plus;Nginx项目部署文档

    一.基本环境搭建 1)查看服务器 [root@Myjumpserver ~]# cat /etc/sysconfig/selinux SELINUX=disabled SELINUXTYPE=targ ...