Description

0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO。
这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Galo,美味度为w[i]。
OvO发现,如果她摘下了i号Galo,那么i的子树中的Galo以及i到根的路径上的其他Galo都会死掉。
OvO的袋子只能装k个Galo,她的嘴巴里还能叼1个,请问她所摘Galo的美味度之和的最大值是多少?

Solution

O(nm2)O(nm^2)的暴力大家应该都会,据说这个加点优化即可跑过
这类问题,先把它映射到dfs序上,在这上面做,
这样,转移就十分显然了,要不直接不选,从上一个转过来,要不自己选,从不是自己子树的第一个转移过来,

复杂度:O(nm)O(nm)

Code

#include <cstdio>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fod(i,a,b) for(int i=a;i>=b;i--)
#define efo(i,q) for(int i=A[q];i;i=B[i][0])
#define min(q,w) ((q)>(w)?(w):(q))
#define max(q,w) ((q)<(w)?(w):(q))
#define W(i,j) ((i)*m-m+(j))
using namespace std;
typedef long long LL;
const int N=100500;
int read(int &n)
{
    char ch=' ';int q=0,w=1;
    for(;(ch!='-')&&((ch<'0')||(ch>'9'));ch=getchar());
    if(ch=='-')w=-1,ch=getchar();
    for(;ch>='0' && ch<='9';ch=getchar())q=q*10+ch-48;n=q*w;return n;
}
int m,n;
int b[N],Si[N];
int d[N];
int B[2*N][2],A[N],B0;
LL f[10200000];
LL ans;
void link(int q,int w){B[++B0][0]=A[q];A[q]=B0,B[B0][1]=w;}
int dfs(int q)
{
    d[++d[0]]=q;Si[q]=1;
    efo(i,q)Si[q]+=dfs(B[i][1]);
    return Si[q];
}
int main()
{
    int q,w;
    read(n),read(m);m=min(n,m+1);
    fo(i,2,n)read(q),read(b[i]),link(q,i);
    dfs(1);
    fod(i,n,1)
    {        int t=W(i,1);
        fo(j,1,m)
        {            f[t]=max(f[t+m],(j>1?f[W(i+Si[d[i]],j-1)]:0)+(LL)b[d[i]]);
            t++;
        }
    }
    ans=0;
    fo(i,1,m)ans=max(ans,f[i]);
    printf("%lld\n",ans);
    return 0;
}

【JZOJ 5426】【NOIP2017提高A组集训10.25】摘Galo相关推荐

  1. JZOJ 5426. 【NOIP2017提高A组集训10.25】摘Galo

    Description 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Gal ...

  2. 【NOIP2017提高A组集训10.25】摘Galo (树形dp)

    Description 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Gal ...

  3. JZOJ5426. 【NOIP2017提高A组集训10.25】摘Galo

    Description 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有根数,除了根节点以外,每个节点i都有一个Gal ...

  4. JZOJ 5421. 【NOIP2017提高A组集训10.25】嘟嘟噜

    Description 由于众所周知的原因, 冈部一直欠真由理一串香蕉. 为了封上真由理的嘴, 冈部承诺只要真由理回答出这个问题, 就给她买一车的香蕉: 一开始有n 个人围成一个圈, 从1 开始顺时针 ...

  5. JZOJ 5425. 【NOIP2017提高A组集训10.25】数论

    Description 聪明的0v0正在学习莫比乌斯反演. 她看到了这样的一道题:有n*m个人站成了一个n*m的方阵-- 剩下的题面,聪明的0v0不记得了.但是,她通过自己高超的数论技巧,给出了一个转 ...

  6. JZOJ 5422. 【NOIP2017提高A组集训10.25】天才绅士少女助手克里斯蒂娜

    Description Input 第一行两个整数n;m 表示电子个数和询问个数. 接下来n 行, 每行两个整数x; y 表示vi. 接下来m 行, 每行形如1 p x y 或2 l r, 分别表示两 ...

  7. JZOJ 5424. 【NOIP2017提高A组集训10.25】凤凰院凶真

    Description Input Output Sample Input 5 1 4 2 5 1 4 1 1 2 4 Sample Output 2 1 4 Data Constraint Solu ...

  8. 5424. 【NOIP2017提高A组集训10.25】凤凰院凶真

    这是一道DP题,然后做的时候发现,DP式子死活推不出来. 题目大意(本人实在是不想复制了呵-- 给出A,B序列 找出他们的最长公共严格递增子序列 明确,这是一道DP 所以设状态fi,jf_{i,j}f ...

  9. JZOJ5424. 【NOIP2017提高A组集训10.25】凤凰院凶真

    题解 题目的意思是求两个序列的最长公共上升子序列. 就此可以联想到求两个序列的最长公共子序列: 设fi,jf_{i,j}表示a序列处理到i,b序列处理j的最长公共子序列, 转移很简单. 现在要满足公共 ...

最新文章

  1. PostgreSQL 打开文件句柄优化 - 百万以上实体对象初始化优化
  2. python 虚拟环境就两句话整那么多没用的
  3. 关注书籍和教程(更新中)
  4. python3安装过程中出现的ssl问题,No module named _ssl或者renaming “_ssl“ since importing it failed
  5. Mac系统下如何使用命令行方式启动MySQL
  6. 使用计算机管理文件教后反思,《管理计算机中的文件》教学反思
  7. Linux Note
  8. C/C++混淆点-运算符短路
  9. leetcode - 91. 解码方法
  10. BeJavaGod - 如何正确使用数据字典进行分类统一操作(一)
  11. webmagic模拟登陆获取cookie_Python3爬虫:selenium模拟登录获取cookie提取数据,存入数据库MySQL...
  12. HTML的Demo实例
  13. 阿里发力硬件,先做路由器再造电视机
  14. 未来教育计算机题库三合一,未来教育-全国计算机等级考试真考题库、高频考点、模拟考场三合一(二级MS Office高级应用)...
  15. linux学习(三)输入输出重定向和管道功能、cat命令、more命令
  16. 运维工作5年简历写成这样,谁敢要你
  17. “中年跳槽,伤筋动骨”:35岁跳槽,你可要想清楚
  18. 什么是GB18030编码?
  19. [电路笔记]非线性电路
  20. vmware虚拟机中ubuntu如何连接校园网netkeeper

热门文章

  1. 面试:WebSocket相关
  2. 基于junit4的关于个人所得税计算的等价类与边界值_关于量子力学的基本原理
  3. 云南小学、初中、高中标准教学实验室设备配置清单整体解决方案
  4. 如何更改工程内最少的代码修改系统UISwitch的大小和样式
  5. C语言语音朗读小工具
  6. 邱与他的bug——Android中点击返回键重新刷新的问题
  7. excel 从身份证号中提取性别,年龄
  8. 2021SC@SDUSC山东大学软件学院软件工程应用与实践--YOLOV5代码分析(十三)metrics.py-1
  9. python画猪猪侠_猪猪侠简笔画怎么画
  10. ES性能优化之查询优化笔记(一)