首先分析题目,这是一道树形dp的题目,是树形背包类的问题,以为每门课的先修课只有一门,所以这一定可以

构成一个森林结构,于是我们可以设计一个虚拟的根节点作为森林的根。

状态转移方程如下

dp[v][k]=dp[u][k]+val

dp[u][k]=max(dp[u][k],dp[v][k−1])

 #include<iostream>
#include<cstdio>
using namespace std;
struct edge
{
int next;
int to;
}g[];
int n,m,num;
int last[];
int f[];
int dp[][];
int val[];
int aa;
int a[];
void dfs(int u,int t)
{
if(t==) return;
for(int i=last[u];i;i=g[i].next)
{
int v=g[i].to;
for(int k=;k<=t;k++)
dp[v][k]=dp[u][k]+val[v];
dfs(v,t-);
for(int k=;k<=t;k++)
dp[u][k]=max(dp[u][k],dp[v][k-]);
}
}
void add(int from,int to)
{
g[++num].next=last[from];
g[num].to=to;
last[from]=num;
}
int main()
{
cin>>n>>m;
for(int i=;i<=n;i++)
{
scanf("%d%d",&aa,&val[i]);
if(aa)
add(aa,i);
else
add(,i);
}
dfs(,m);
cout<<dp[][m];
return ;
}

最新文章

  1. HAProxy的日志配置以及ACL规则实现负载均衡
  2. python数据结构与算法
  3. 廖雪峰js教程笔记5 Arrow Function(箭头函数)
  4. Version of SQLCE in WP8
  5. ab压力测试工具-批量压测脚本
  6. 如何把双引号包含到echo命令的字符串中
  7. 安装新版本的mysql数据库
  8. css 中 的 float :left 和 clear :both
  9. T-SQL 基于列的逻辑表达式 (CASE)
  10. AC automation 模板
  11. 第七章——DMVs和DMFs(3)——用DMV和DMF监控TempDB
  12. 基于ThinkPHP 5.0与Vue.JS 2.x的前后端开源开发框架VueThink
  13. 解压unzip的用法
  14. Python3 获取本机 IP
  15. oracle 中查看数据库表中某个字段是否重复
  16. 匿名内部类可以访问的变量---静态成员变量和final修饰的局部变量
  17. java设计模式之-观察者模式(发布-订阅模式)
  18. legend2---开发日志6(后端和前端如何相互配合(比如php,js,元素状态和数据改变))
  19. Android:Error:Execution failed for task &#39;:app:clean&#39;. &gt; Unable to delete directory
  20. iOS学习笔记06—Category和Extension

热门文章

  1. CMD之入门篇
  2. Chrome实用技巧集锦
  3. mui的switch开关的应用
  4. Kafka如何保证消息不丢失不重复
  5. java json 转换
  6. Css - 元素的显示模式
  7. P4070 [SDOI2016]生成魔咒
  8. 如何能让MAC和PC都能读写移动硬盘
  9. 2018牛客暑期ACM多校训练营第二场(有坑未填)
  10. FlowNet2.0 安装指南