专题训练

 #include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
const int MAXN=;
const int INF=0x3fffffff;
struct Node
{
int to;
int next;
}edge[MAXN*];
int tol;
int head[MAXN];
int dp[MAXN][];
int price[MAXN][];
int power[MAXN][]; void init()
{
memset(head,-,sizeof(head));
tol=;
}
void add(int a,int b)
{
edge[tol].to=b;
edge[tol].next=head[a];
head[a]=tol++;
edge[tol].to=a;
edge[tol].next=head[b];
head[b]=tol++;
}
int n,m;
int tmp[MAXN];
void dfs(int u,int pre)
{
if(head[u]==-||(edge[head[u]].to==pre&&edge[head[u]].next==-))//叶子结点
{//叶子结点的条件不要错了!!!!
for(int i=;i<=m;i++)dp[u][i]=; for(int i=;i<=m;i++)tmp[i]=dp[u][i];
//因为存在价格为0的点。所以倒序的DP并不能保证只取一件物品
for(int i=m;i>=;i--)
{
for(int j=;j<=price[u][];j++)
if(price[u][j]<=i)
dp[u][i]=max(dp[u][i],tmp[i-price[u][j]]+power[u][j]); tmp[i]=dp[u][i];//tmp数组是记录的dp的上一个状态
}
return;
}
for(int i=;i<=m;i++) dp[u][i]=INF;
for(int i=head[u];i!=-;i=edge[i].next)
{
int v=edge[i].to;
if(v==pre)continue;
dfs(v,u);
for(int j=m;j>=;j--)
{
int t=;
for(int k=;k<=j;k++)//这里k一定要从0开始。
t=max(t,min(dp[u][j-k],dp[v][k]));
dp[u][j]=t;
}
} for(int i=;i<=m;i++)tmp[i]=dp[u][i];
for(int i=m;i>=;i--)
{
for(int j=;j<=price[u][];j++)
if(price[u][j]<=i)
dp[u][i]=max(dp[u][i],tmp[i-price[u][j]]+power[u][j]);
//和上面一样分组背包加了个tmp数组
tmp[i]=dp[u][i];
}
}
int main()
{
int u,v;
int T;
scanf("%d",&T);
while(T--)
{
init();
scanf("%d",&n);
for(int i=;i<n;i++)
{
scanf("%d%d",&u,&v);
add(u,v);
}
scanf("%d",&m);
for(int i=;i<=n;i++)
{
scanf("%d",&price[i][]);
power[i][]=price[i][];
for(int j=;j<=price[i][];j++)
{
scanf("%d%d",&price[i][j],&power[i][j]);
}
}
dfs(,);
printf("%d\n",dp[][m]);
}
return ;
}

hdu 4044 2011北京赛区网络赛E 树形dp ****的更多相关文章

  1. hdu 4050 2011北京赛区网络赛K 概率dp ***

    题目:给出1-n连续的方格,从0开始,每一个格子有4个状态,左右脚交替,向右跳,而且每一步的步长必须在给定的区间之内.当跳出n个格子或者没有格子可以跳的时候就结束了,求出游戏的期望步数 0:表示不能到 ...

  2. hdu 4049 2011北京赛区网络赛J 状压dp ***

    cl少用在for循环里 #include<cstdio> #include<iostream> #include<algorithm> #include<cs ...

  3. hdu 4045 2011北京赛区网络赛F 组合数+斯特林数 ***

    插板法基础知识 斯特林数见百科 #include<iostream> #include<cmath> #include<cstdio> #include<cs ...

  4. hdu 4043 2011北京赛区网络赛D 概率+大数 **

    推出公式为:P = A(2n,n)/(2^(2n)*n!) 但是不会大数,学完java再补

  5. hdu 4041 2011北京赛区网络赛B 搜索 ***

    直接在字符串上搜索,注意逗号的处理 #include<cstdio> #include<iostream> #include<algorithm> #include ...

  6. hdu 4046 2011北京赛区网络赛G 线段树 ***

    还带这么做的,卧槽,15分钟就被A了的题,居然没搞出来 若某位是1,则前两个为wb,这位就是w #include<cstdio> #include<cstring> #defi ...

  7. hdu 4035 2011成都赛区网络赛E 概率dp ****

    太吊了,反正我不会 /* HDU 4035 dp求期望的题. 题意: 有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, 从结点1出发,开始走,在每个结点i都有3种可能: 1.被杀死,回到结点 ...

  8. HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)

    HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛) Panda Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: ...

  9. hdu 4031 2011成都赛区网络赛A题 线段树 ***

    就是不知道时间该怎么处理,想了好久,看了别人的题解发现原来是暴力,暴力也很巧妙啊,想不出来的那种  -_-! #include<cstdio> #include<iostream&g ...

随机推荐

  1. Python类的特点 (2) :类属性与实例属性的关系

    测试代码: #encoding:utf-8 class Parent(object): x=1 #x是Parent类的属性(字段) ls=[1,2] #ls是一个列表,也是Parent类的属性(字段) ...

  2. 【GoLang】golang 中可变参数的 定义、传递 示例

    支持可变长参数列表的函数可以支持任意个传入参数,比如fmt.Println函数就是一个支持可变长参数列表的函数. package main import "fmt" // 这个函数 ...

  3. WPF 中更新界面信息

    1.Dispatcher.BeginInvoke int ii = 0; new Thread(new ParameterizedThreadStart((i) => { while (true ...

  4. appium + python 环境搭建

    所需:JDK.Android SDK.Appium服务程序.Appium客户端程序 1. 安装最新的JDK,并配置环境变量. JAVA_HOME=C:\Program Files (x86)\Java ...

  5. iOS UIViewController 和 nib 相关的3个方法

    iOS UIViewController 的 awakeFromNib 以及 - (id)initWithCoder:(NSCoder *)aDecoder 和 - (instancetype)ini ...

  6. 对于Tomcat服务器环境变量和启动配置的一点补充

    我们之前第一次使用Tomcat服务器运行jsp应用时,曾经给Tomcat配置过一个环境变量CATALINA_HOME,这个变量指定了Tomcat的安装位置,对于多个开发项目,我们一般会释放多个tomc ...

  7. Django~Views

    In Django, web pages and other content are delivered by views. To get from a URL to a view, Django u ...

  8. nyoj305_表达式求值

    表达式求值 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min ...

  9. c++从文件中读取特定字符串问题的总结

    1.每次从文件中读出一行作为一个字符串 可以用ifstream()函数来打开一个文件,然后用while加getline()函数即可每次读一行文件,直到文件结束 #include<unistd.h ...

  10. replace和replaceAll(路径反斜杠问题)

    转载自:http://www.cnblogs.com/zhenmingliu/archive/2012/01/13/2321560.html 1)replace的参数是char和CharSequenc ...