(树形dp)hdu 1520 Anniversary party
时间:2019-02-11
本文章向大家介绍(树形dp)hdu 1520 Anniversary party,主要包括(树形dp)hdu 1520 Anniversary party使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <queue>
#include <stack>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=6000+10;
int n;
vector<int>e[maxn];
int a[maxn];
int dp[maxn][2];
bool have[maxn];
struct _rank
{
int r;
int num;
}ran[maxn];
bool tem(_rank a,_rank b)
{
return a.r>b.r;
}
void work(int x)
{
for(int i=0;i<e[x].size();i++)
{
ran[e[x][i]].r=ran[x].r+1;
work(e[x][i]);
}
}
int main()
{
while(~scanf("%d",&n))
{
memset(dp,0,sizeof(dp));
memset(have,false,sizeof(have));
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
ran[i].num=i;
ran[i].r=0;
e[i].clear();
}
while(1)
{
int l,k;
scanf("%d%d",&l,&k);
if(!l&&!k) break;
e[k].push_back(l);
have[l]=true;
}
for(int i=1;i<=n;i++)
{
if(have[i]==false)
work(i);
}
sort(ran+1,ran+n+1,tem);//对等级进行排序
for(int i=1;i<=n;i++)//ran[i].num为根
{
dp[ran[i].num][1]+=a[ran[i].num];
for(int j=0;j<e[ran[i].num].size();j++) //e[ran[i].num][j]为叶子
{
dp[ran[i].num][1]+=dp[e[ran[i].num][j]][0];
dp[ran[i].num][0]+=max(dp[e[ran[i].num][j]][0],dp[e[ran[i].num][j]][1]);
}
}
int ans=0;
for(int j=n;j>=1;j--)
if(ran[j].r==0) ans+=max(dp[ran[j].num][1],dp[ran[j].num][0]);
printf("%d\n",ans);
}
return 0;
}
- 如何找到最优学习率?
- 简单易学的机器学习算法——Rosenblatt感知机
- 多级复制的数据不同步问题(r7笔记第11天)
- 简单易学的机器学习算法——Logistic回归
- Python 用OPEN读文件报错 ,路径以及r
- Oracle 12c PDB浅析(r9笔记第10天)
- merge语句导致的CPU使用率过高的优化(二) (r7笔记第9天)
- 网页爬虫-R语言实现基本函数
- Python中的random模块用于生成随机数
- 简单易学的机器学习算法——极限学习机(ELM)
- 图片数据集太少?Keras Image Data Augmentation 各参数详解
- 备库归档删除策略失效的问题分析 (r7笔记第6天)
- 优化算法——梯度下降法
- Java基础-26(02)总结网络编程
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 虚拟机中centos修改时间的方法
- Ubuntu 18.04 Server 设置静态IP 的方法
- 嵌入式Linux重启QT应用程序的简单办法(基于QT4.8 qws)
- CentOS下MySQL的彻底卸载的几种方法
- centos7中安装Android SDK的方法步骤
- centos配置ssh免密码登录后仍要输入密码的解决方法
- CentOS7.2安装Nginx的方法步骤
- CentOS安装Python2.7与Python2.6并存的方法
- 详解Centos下YUM安装PHP的两种方式
- linux下make命令实现输出高亮的方法
- Ubuntu彻底卸载MySQL、Apache2和Php的方法教程
- linux下如何创建守护进程的步骤
- ubuntu系统中/etc/rc.local和/etc/init.d/rc.local的区别详解
- centos6.8下hadoop3.1.1完全分布式安装指南(推荐)
- 批处理模式下运行 top 命令的方法