树形DP(HDU4616)
来源:互联网 发布:网页设计软件 编辑:程序博客网 时间:2024/05/18 02:25
一眼看上去就是树形DP。可是就是不知道为什么必须枚举每一条边,,,,而不能枚举每一个点!!!!
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<iostream>#include<algorithm>#include<stack>#include<queue>#include<vector>#include<set>#include<map>#include<string>using namespace std;typedef long long ll;int w[100010],dp[100010][5];struct node{ int a,b,next;}edge[100010];int cnt,n,c,head[100010],op[100010];void add(int a,int b){ edge[cnt].a=a; edge[cnt].b=b; edge[cnt].next=head[a]; head[a]=cnt++;}int ans;int dfs(int u,int num){ if(num==c)return 0; if(dp[u][num]!=-1) return dp[u][num]; int fa=edge[u].a; int v=edge[u].b; int res=w[v]; for(int i=head[v];i!=-1;i=edge[i].next) { node e=edge[i]; if(e.b!=fa) { res=max(dfs(i,num+op[v])+w[v],res); } } return dp[u][num]=res;}int main(){ int t;scanf("%d",&t); while(t--) { memset(dp,-1,sizeof(dp));ans=0; cnt=0;memset(head,-1,sizeof(head));scanf("%d%d",&n,&c); for(int i=0;i<n;i++)scanf("%d%d",&w[i],&op[i]); for(int i=1;i<n;i++) { int a,b; scanf("%d%d",&a,&b); add(a,b);add(b,a); } for(int i=0;i<cnt;i++) { node e=edge[i]; ans=max(ans,dfs(i,op[e.a])+w[e.a]); } printf("%d\n",ans); } return 0;}
阅读全文
1 0
- hdu4616(树形dp)
- 树形DP(HDU4616)
- hdu4616 树形DP
- 树形dp--hdu4616
- hdu4616(树形dp)
- hdu4616 树形dp
- hdu4616 Game 【树形dp】
- hdu4616 树形dp,分治思想
- HDU4616 Game (树形DP/搜索)
- hdu4616 树形dp(有限制的权值最大链)
- poj1155 (树形dp)
- poj1947(树形dp)
- hdu2196Computer(树形dp)
- poj3107(树形dp)
- CodeForces337D(树形DP)
- hdu1561(树形dp)
- codeforces581f(树形dp)
- hdu5379(树形dp)
- 实时语义分割--ICNet for Real-Time Semantic Segmentation on High-Resolution Images
- 设计模式总结之Spring中使用到的设计模式
- 设计模式-代理模式
- IDEA中添加xml配置文件时,显示file
- 345. Reverse Vowels of a String
- 树形DP(HDU4616)
- Mysql写入数据的错误,很容易忽视掉!
- [bzoj4930][SDOI省队集训2017]棋盘
- XML 及其解析
- 设计模式---策略模式
- mysql数据库导入和导出
- 怎么将硬盘GPT分区转换为MBR分区模式
- PHP正则表达式
- 自定义广播