URAL1018 Binary Apple Tree
非常经典的树形DP(假设不会树形DP建议先看下面..我就是先看了别的题,,握手的什么的)
给一棵树,留下N条边(它若留下边父亲的边比留下),,问最后苹果最多多少个.......
建树我认为非常费劲,,,毕竟不太会........DP比較好理解吧,,,,,,,就是多想一想把,,,,,当作模板题记录下来~~~~
#include <iostream>
#include <cstdio>
#include <bits/stdc++.h>
using namespace std;
const int maxn=101,maxq=100;
int n;//jieidanshu
int q;//baoliudebian
int g[maxn][maxn];//juzhenbiaoshiliangdianguanxi
int son[maxn][2]; //zijiedian
int apple[maxn]; //jiluzijieidanshang de pingguoshu
int dp[maxn][maxn]; //jiyihua
int flag[maxn]; //biaoji
int isleaf[maxn]; //jilushifouziye
void create(int root)
{
int i,ct=0;
for(i=1;i<=n;i++)
{
if(g[root][i]!=-1&&flag[i]==0) //zhaodaoleziye
{
son[root][ct++] = i; //diyigehuozhediergeziye
apple[i]=g[root][i];
flag[i] = 1;
create(i); //jixujianshu
}
}
if(ct==0)//meiyouziye
{
isleaf[root]=1;
}
}
int treedp(int root, int num) //num biaoshi shengxiade dianshu
{
if(num==0) return 0; //bushengxia
if(isleaf[root]==1) return apple[root]; //zuihouyihang
if(dp[root][num]!=-1) return dp[root][num]; //jiyihua
int i,temp=0;
for(i=0;i<num;i++)
{
temp=max(temp,treedp(son[root][0],i)+treedp(son[root][1],num-1-i));
}
dp[root][num]=temp+apple[root];
//printf("%d**\n",dp[root][num]);
return dp[root][num];
}
int main()
{
int i,x,y,w;
memset(g,-1,sizeof(g));
scanf("%d%d",&n,&q);
for(i=1;i<=n-1;i++)
{
scanf("%d%d%d",&x,&y,&w);
g[x][y]=w;//zhelihenzhongyaodexiangfa!
g[y][x]=w;
}
memset(flag,0,sizeof(flag));
memset(isleaf,0,sizeof(isleaf));
flag[1]=1;// 1 shi morende
apple[1]=0;
create(1);
memset(dp,-1,sizeof(dp));
printf("%d\n",treedp(1,q+1));
return 0;
}
转载于:https://www.cnblogs.com/blfbuaa/p/7390212.html
URAL1018 Binary Apple Tree相关推荐
- Binary Apple Tree
Let's imagine how apple tree looks in binary computer world. You're right, it looks just like a bina ...
- (树形dp)Binary Apple Tree
Let's imagine how apple tree looks in binary computer world. You're right, it looks just like a bina ...
- Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)
Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...
- 笔试算法题(58):二分查找树性能分析(Binary Search Tree Performance Analysis)
议题:二分查找树性能分析(Binary Search Tree Performance Analysis) 分析: 二叉搜索树(Binary Search Tree,BST)是一颗典型的二叉树,同时任 ...
- 【ACM】二叉搜索树(Binary Search Tree /BS Tree) 小结
动态管理集合的数据结构--二叉搜索树 搜索树是一种可以进行插入,搜索,删除等操作的数据结构,可以用字典或者优先队列. 二叉排序树又称为二叉查找树,他或者为空树,或者是满足如下性质的二叉树. (1)若它 ...
- 二叉搜索树(binary search tree)的建立、删除、查找
由于输入的数据顺序不同,建立的bst会不一样.最坏的情况就是一个链,所以我们引入了平衡二叉树的概念.这里我们先来看binary search tree.(我随笔里面有一些相关知识) 建立(也就是插入) ...
- 查找二叉树中出现次数最多的数 Find Mode in Binary Search Tree
为什么80%的码农都做不了架构师?>>> 问题: Given a binary search tree (BST) with duplicates, find all the ...
- LeetCode 426. Convert Binary Search Tree to Sorted Doubly Linked List--转换二叉树为双向链表--Java,C++,Python解法
题目地址:Convert Binary Search Tree to Sorted Doubly Linked List - LeetCode Convert a BST to a sorted ci ...
- LeetCode: 109. Convert Sorted List to Binary Search Tree
题目 Given a singly linked list where elements are sorted in ascending order, convert it to a height b ...
最新文章
- AttributerError: HTTPServer instance has no attribute 'server_forever'
- MATLAB的iptcheckinput函数详解
- 二阶差分预测后数据还原公式_携程如何基于ARIMA时序分析做业务量的预测
- VS.NET 2003 安装问题
- 【翻译】.NET 5 Preview5发布
- 内置函数之sorted,filter,map
- 广技师17专插本c语言答案,广东技术师范学院2017年专插本C语言程序设计(1)
- rocketMQ基本架构简介
- ubuntu 14.10 64bit系统安装MBuntu主题(仿Mac主题)
- 基于CentOS构建高性能的LAMP平台
- 为什么Prim算法不适用于带权有向图
- 设计师常用网页小图标大全
- Hibernate相关内容
- ORACLE 数据库的级联查询 一句sql搞定(部门多级)
- 使用miniSipServer为中小企业搭建VOIP服务器
- 常用的软件测试方法及特点分析
- 行驶证OCR识别,信息提取
- gc0329曝光时间设置
- 正则表达式 '^[a-zA-Z0-9''-'\s]{1,30}$' 代表什么意思?
- 制作和删除软RAID