hdu 4267 树形DP
思路:先dfs一下,找出1,n间的路径长度和价值,回溯时将该路径长度和价值清零。那么对剩下的图就可以直接树形dp求解了。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#define inf 100000000
#define Maxn 110
using namespace std;
int vi[Maxn],head[Maxn],dp[Maxn][],e,n,T,a[Maxn],len,sum;
struct Edge{
int u,v,next,val;
}edge[Maxn*];
void init()
{
memset(vi,,sizeof(vi));
memset(head,-,sizeof(head));
memset(dp,,sizeof(dp));
memset(a,,sizeof(a));
e=len=sum=;
}
void add(int u,int v,int val)
{
edge[e].u=u,edge[e].v=v,edge[e].val=val,edge[e].next=head[u],head[u]=e++;
edge[e].u=v,edge[e].v=u,edge[e].val=val,edge[e].next=head[v],head[v]=e++;
}
int dfs(int u)
{
int i,v;
vi[u]=;
if(u==)
{
sum+=a[u];
a[u]=;
return ;
}
for(i=head[u];i!=-;i=edge[i].next)
{
v=edge[i].v;
if(vi[v]) continue;
if(dfs(v))
{
len+=edge[i].val,edge[i].val=edge[i^].val=;
sum+=a[u];
a[u]=;
return ;
}
}
return ;
}
void Treedp(int u)
{
int i,v,j,k;
vi[u]=;
for(i=head[u];i!=-;i=edge[i].next)
{
v=edge[i].v;
if(vi[v]) continue;
Treedp(v);
int cost=*edge[i].val;
for(j=T;j>=cost;j--){
int temp=;
for(k=;k<=j-cost;k++)
temp=max(temp,dp[u][j-cost-k]+dp[v][k]);
dp[u][j]=max(dp[u][j],temp);
} }
for(i=;i<=T;i++)
dp[u][i]+=a[u];
}
int main()
{
int i,j,u,v,t;
while(scanf("%d%d",&n,&T)!=EOF)
{
init();
for(i=;i<n;i++){
scanf("%d%d%d",&u,&v,&t);
add(u,v,t);
}
for(i=;i<=n;i++)
scanf("%d",a+i);
dfs(n);
if(len>T)
{
printf("Human beings die in pursuit of wealth, and birds die in pursuit of food!\n");
continue;
}
T-=len;
memset(vi,,sizeof(vi));
Treedp(n);
printf("%d\n",dp[n][T]+sum);
}
return ;
}
hdu 4267 树形DP的更多相关文章
- hdu 4123 树形DP+RMQ
http://acm.hdu.edu.cn/showproblem.php? pid=4123 Problem Description Bob wants to hold a race to enco ...
- HDU 1520 树形dp裸题
1.HDU 1520 Anniversary party 2.总结:第一道树形dp,有点纠结 题意:公司聚会,员工与直接上司不能同时来,求最大权值和 #include<iostream> ...
- HDU 1561 树形DP入门
The more, The Better Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU 2196树形DP(2个方向)
HDU 2196 [题目链接]HDU 2196 [题目类型]树形DP(2个方向) &题意: 题意是求树中每个点到所有叶子节点的距离的最大值是多少. &题解: 2次dfs,先把子树的最大 ...
- HDU 1520 树形DP入门
HDU 1520 [题目链接]HDU 1520 [题目类型]树形DP &题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知 ...
- codevs 1380/HDU 1520 树形dp
1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 回到问题 题目描述 Description Ural大学有N个职员 ...
- HDU 5834 [树形dp]
/* 题意:n个点组成的树,点和边都有权值,当第一次访问某个点的时候获得利益为点的权值 每次经过一条边,丢失利益为边的权值.问从第i个点出发,获得的利益最大是多少. 输入: 测试样例组数T n n个数 ...
- hdu 4607 (树形DP)
当时比赛的时候我们找出来只要求出树的最长的边的节点数ans,如果要访问点的个数n小于ans距离直接就是n-1 如果大于的话就是(n-ans)*2+ans-1,当时求树的直径难倒我们了,都不会树形dp ...
- hdu 1520 (树形DP)
dp[i][0]表示i不参加 dp[i][1]表示i参加 简单的树形dp #include<stdio.h> #include<string.h> #define N 6100 ...
随机推荐
- HDU 5763 Another Meaning (kmp + dp)
Another Meaning 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5763 Description As is known to all, ...
- Spring AOP Example – Pointcut , Advisor
In last Spring AOP advice examples, the entire methods of a class are intercepted automatically. But ...
- uva 315 Network(无向图求割点)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- uva10474 简单排序查找 一次AC
题目很简单,加上读题20分钟一次AC.还是用到了快排qsort. #include<iostream> #include<cstdlib> using namespace st ...
- POJ 3259 Wormholes(SPFA判负环)
题目链接:http://poj.org/problem?id=3259 题目大意是给你n个点,m条双向边,w条负权单向边.问你是否有负环(虫洞). 这个就是spfa判负环的模版题,中间的cnt数组就是 ...
- CodeForces 706C Hard problem (水DP)
题意:对于给定的n个字符串,可以花费a[i] 将其倒序,问是否可以将其排成从大到小的字典序,且花费最小是多少. 析:很明显的水DP,如果不是水DP,我也不会做.... 这个就要二维,d[2][max ...
- [1.1]Environment preset on a Windows server
1. Python 3.5.1 (also on your personal computer) 2. Django 1.10.1 (also on your personal computer) 3 ...
- 在Android Eclipse 开发如何 使用 (*.aar)文件
http://www.cnblogs.com/shortboy/p/4424944.html 开场白:其实这篇文章有点白费心机. 详细说明是:http://blog.csdn.net/qiujuer/ ...
- 【转】Installing the libv8 Ruby gem on Centos 5.8
转自:http://appsintheopen.com/posts/18-installing-the-libv8-ruby-gem-on-centos-5-8 First, Centos 5.8 s ...
- 关于Python中的self
虽然我现在写过一些Python代码,但实际上几乎还没用过Class,而且一直觉得一个很别扭的事情是,Class中的函数都要写个参数self,虽然实例化调用的时候不需要. 当然,一开始就知道Python ...