http://blog.csdn.net/libin56842/article/details/9876503

这道题和poj 1155的区别是:

poj1155是边的价值,所以从边的关系入手

hdu1011是点的价值,从点的关系入手,所以node没有val,在dp时不用记录叶子节点个数,只需要对每个点用背包遍历一遍即可

dp[root][j+k] = max(dp[root][j+k],dp[p][k]+dp[root][j])

dp表示在i点放j人能得到的能量

#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <stack>
#include <queue>
#include <cctype>
#include <vector>
#include <iterator>
#include <set>
#include <map>
#include <sstream>
using namespace std; #define mem(a,b) memset(a,b,sizeof(a))
#define pf printf
#define sf scanf
#define spf sprintf
#define pb push_back
#define debug printf("!\n")
#define MAXN 1010
#define MAX(a,b) a>b?a:b
#define blank pf("\n")
#define LL long long
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define pqueue priority_queue
#define INF 0x3f3f3f3f int n,m; struct node
{
int y,next;
}tree[]; int head[],dp[][],ptr=; int bug[],vl[],vis[]; void add(int x,int y)
{
tree[ptr].y = y;
tree[ptr].next = head[x];
head[x] = ptr++;
} void dfs(int root)
{
int i,j,k;
vis[root] = ;
int cost = (bug[root]+)/;
for(i=cost;i<=m;i++)
dp[root][i] = vl[root]; for(i=head[root]; i!=-; i=tree[i].next)
{
int p = tree[i].y; if(!vis[p])
{
dfs(p);
for(j=m;j>=cost;j--)
{
for(k=;j+k<=m;k++)
{
dp[root][j+k] = max(dp[root][j+k],dp[p][k]+dp[root][j]);
}
}
}
}
} int main()
{
int i,j,k,a,b;
while(~sf("%d%d",&n,&m) && m+n>)
{
mem(head,-);
ptr = ;
for(i=;i<=n;i++)
{
sf("%d%d",&bug[i],&vl[i]);
} for(i=;i<=n;i++)
{
sf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
if(!m)
{
pf("0\n");
continue;
}
mem(dp,);
mem(vis,);
dfs();
pf("%d\n",dp[][m]);
}
return ;
}
/*
5 10
50 10
40 10
40 20
65 30
70 30
1 2
1 3
2 4
2 5
1 1
20 7
-1 -1
*/

最新文章

  1. Javascript动态执行JS(new Function与eval比较)
  2. java从基础知识(十)java多线程(下)
  3. 导入镜像文件,分区启动liunx
  4. Maven将依赖的所有jar包打成一个jar
  5. WinForm------GridControl的部分属性介绍
  6. 【Android】首次进入应用时加载引导界面
  7. 【matlab】读写文件
  8. [Tommas] UNION 和 UNION ALL 的区别
  9. Inno Setup技巧[界面]添加和自定义左下角标签
  10. 一款C++静态分析工具 —— CppDepend
  11. Linux--struct file结构体
  12. integer与int区别以及integer.values()方法详解
  13. centos7安装nodejs
  14. 第二届强网杯-simplecheck
  15. 用户态与内核态 &amp; 文件流与文件描述符 简介【转】
  16. ORA-28000: the account is locked解决办法
  17. AppFabric查询工作流实例
  18. Linux 修改用户组后,如何关闭所有 X session 下使得组生效?
  19. selenium+Page Objects(第一话)
  20. Revit MEP API连接器类别

热门文章

  1. selenium自动加载Flash
  2. 2016级算法第四次上机-D.AlvinZH的1021实验plus
  3. python 类,对象
  4. 分分钟钟学会Python - 数据类型(dict)
  5. linux忘记root密码怎么办
  6. reset.css(重置浏览器默认样式)
  7. 1-----Docker实例-安装Nginx
  8. 【OpenCV-Python】-图像平滑
  9. Oracle 如何修改列的数据类型
  10. Loadrunner—关联知识点