二叉苹果树(树形D)
来源:互联网 发布:bigworld引擎全套源码 编辑:程序博客网 时间:2024/05/16 08:20
#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#define maxn 302#define inf 10000007using namespace std;struct data{ int x,y,z;};data lin[maxn*2];int n,d[maxn],f[maxn][maxn],q,tot[maxn],nxt[maxn*2],fst[maxn],cnt=0;void add(int xx,int yy,int ww){lin[++cnt].x=xx,lin[cnt].y=yy,lin[cnt].z=ww,nxt[cnt]=fst[xx],fst[xx]=cnt;lin[++cnt].x=yy,lin[cnt].y=xx,lin[cnt].z=ww,nxt[cnt]=fst[yy],fst[yy]=cnt;}int doit(int p,int t,int da){ if(f[p][t]>=0){return f[p][t];}int j=fst[p],l=0,r=0;for(int j=fst[p];j;j=nxt[j]){ if(lin[j].y==da)continue; if(!l)l=lin[j].y; else r=lin[j].y;} for(int i=0;i<t;++i){if(tot[l]<i || (tot[r]<t-1-i))continue; f[p][t]=max(f[p][t],doit(l,i,p)+doit(r,t-1-i,p));}f[p][t]+=d[p]; return (f[p][t]);}int findtot(int p,int da){tot[p]=1; for(int i=fst[p];i;i=nxt[i]){ if(lin[i].y==da)continue; d[lin[i].y]=lin[i].z; f[lin[i].y][1]=lin[i].z; tot[p]+=findtot(lin[i].y,p);}return tot[p];}int main(){int fa,sn,w; scanf("%d%d",&n,&q);++q; memset(f,128,sizeof(f)); for(int i=2;i<=n;++i){ scanf("%d%d%d",&fa,&sn,&w); add(fa,sn,w); f[i][0]=0;}d[1]=0;tot[1]=findtot(1,1);doit(1,q,1);printf("%d\n",f[1][q]);}
0 0
- 二叉苹果树(树形D)
- 洛谷P2015 二叉苹果树(树形dp)
- [题解] P2015 二叉苹果树(树形DP)
- 二叉苹果树 树形DP
- 【树形dp】二叉苹果树
- 【codevs】二叉苹果树 (二叉树的树形dp)
- URAL 1018 二叉苹果树(简单树形dp)
- SSL 1605 二叉苹果树 树形dp
- 二叉苹果树
- 二叉苹果树
- 二叉苹果树
- URAL_1018之二叉苹果树
- ural 1018 二叉苹果树
- Ural1018 二叉苹果树
- 洛谷 P2015 二叉苹果树
- 【9936】二叉苹果树
- CJOJ P1976 二叉苹果树
- cod5565二叉苹果树
- Huffman 编码压缩算法
- Socket网络编程学习笔记(4):TCP消息边界处理
- redis集群配置
- XML解析之SAX
- Java 数组操作常见的十一种方法
- 二叉苹果树(树形D)
- [WinForm]ListView行高的设置
- MongoDB 安装成为Windows服务
- mysql数据库导出表的数据字典
- 打开mxd和两控件复制
- 在TOMCAT中部署war
- 【C/C++】用回调函数实现计算器
- 基于RNN神经网络和BPTT算法实现的简单二进制计数器
- GDB 调试 C++ 程序 core dump