Description

Data Constraint

Solution

我们可以用dp解决。设dp[i]表示前i个节点的最优值。我们发现一对节点(x,y)(x的dfs序小于y的dfs序)可以形成相邻叶子当且仅当x处于其lca的儿子u的右链上,y处于lca的儿子v的左链上,且u,v相邻u在v的左方。我们将每一条右链存下,对于每个节点查找其对应右链的答案。这样是O(N^2)的。
我们发现没一个左链上的点顺序往下的同时,我们若维护最大值在左链上,右链的范围是单调递增的,我们可以维护一个指针即可查询答案。最大值在右边同理。时间复杂度O(N)。在这里很想吐槽数据开10^5,这TM根本在本机上没法调,还要我专门改成bfs来调试!!!

Code

#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=3e5+5;
int first[maxn],last[maxn],next[maxn],a[maxn],f[maxn],b[maxn],size[maxn],fa[maxn];
int first1[maxn],last1[maxn],next1[maxn],top[maxn],dfn[maxn],d[maxn],g[maxn],g1[maxn];
int n,i,t,j,k,l,x,y,z,num,num1,ln,ans,mx,mx1;
void lian(int x,int y){last[++num]=y;next[num]=first[x];first[x]=num;
}
void lian1(int x,int y){last1[++num1]=y;next1[num1]=first1[x];first1[x]=num1;
}
void dg(int x,int y){int t;dfn[x]=++num;g1[num]=x;if (!y) f[x]=a[x];size[x]=1;for (t=first[x];t;t=next[t]){fa[last[t]]=x;if (size[x]>1)top[last[t]]=last[t],dg(last[t],num);else top[last[t]]=top[x],dg(last[t],y);size[x]+=size[last[t]];}lian1(dfn[x]+size[x]-1,x);
}
int main(){
//  freopen("data.in","r",stdin);freopen("data.out","w",stdout);scanf("%d",&n);for (i=1;i<=n;i++){scanf("%d",&a[i]);scanf("%d",&t);for (j=1;j<=t;j++)scanf("%d",&b[t-j+1]);for (j=1;j<=t;j++)lian(i,b[j]);}num=0;top[1]=1;dg(1,0);k=1;top[n+1]=n+1;for (i=2;i<=n+1;i++)if (top[g1[i]]==g1[i]){x=dfn[g1[k]]-1;if (!x){k=i;continue;}d[0]=0;for (t=first1[x];t;t=next1[t])d[++d[0]]=last1[t];d[d[0]+1]=0;t=0;mx1=-1e9;mx=b[0]=a[fa[g1[k]]];for (j=1;j<=d[0];j++)b[j]=max(b[j-1],a[d[j]]);g[d[0]+1]=g[d[0]+2]=-2e9;for (j=d[0];j>=1;j--)g[j]=max(g[j+1],f[d[j]]-b[j-1]);for (j=k;j<i;j++){while (b[t]<=mx && t<d[0]) mx1=max(mx1,f[d[++t]]);f[g1[j]]=max(mx1+a[g1[j]]-mx,g[t+1]+a[g1[j]]);mx=max(mx,a[g1[j]]);}k=i;    }ans=0;for (i=1;i<=n;i++)if (dfn[i]+size[i]==n+1) ans=max(ans,f[i]);printf("%d\n",ans);
}

【JZOJ5336】【NOIP2017提高A组模拟8.24】提米树相关推荐

  1. 5334. 【NOIP2017提高A组模拟8.24】空

    Description Input Output Sample Input 3 10 100 1 50 50 100 Sample Output 99 Data Constraint Solution ...

  2. JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫

    Description 信息组最近猫成灾了!隔壁物理组也拿猫没办法.信息组组长只好去请神刀手来帮他们消灭猫.信息组现在共有n 只猫(n 为正整数),编号为1 到n,站成了一个环,第i 只猫的左边是第i ...

  3. JZOJ 5417. 【NOIP2017提高A组集训10.24】方阵

    Description 题目背景 热烈庆祝北京师范大学附属实验中学成立100周年! 问题描述 为了准备校庆庆典,学校招募了一些学生组成了一个方阵,准备在庆典上演出. 这个方阵是一个n*m的矩形,第i行 ...

  4. JZOJ 5392. 【NOIP2017提高A组模拟10.5】Lucky Transformation

    Description Input Output Sample Input 7 2 2343223 4 1 2234 Sample Output 2243233 2334 Data Constrain ...

  5. JZOJ 5379. 【NOIP2017提高A组模拟9.21】Victor爱数字

    Description Victor 是一名热爱数字的同学.他最近在思考这样一个问题: 一个字符串是回文的当且仅当它倒过来还和原来相同.那么如果一个数的数串没有一个长度超过1 的子串是回文串的话,它就 ...

  6. JZOJ 5371. 【NOIP2017提高A组模拟9.17】组合数问题

    Description 定义"组合数"S(n,m)代表将n 个不同的元素拆分成m 个非空集合的方案数.举个例子,将{1,2,3}拆分成2 个集合有({1},{2,3}),({2},{1,3}),({3 ...

  7. JZOJ 100047. 【NOIP2017提高A组模拟7.14】基因变异

    Description 21 世纪是生物学的世纪,以遗传与进化为代表的现代生物理论越来越多的 进入了我们的视野. 如同大家所熟知的,基因是遗传因子,它记录了生命的基本构造和性能. 因此生物进化与基因的 ...

  8. JZOJ 100045. 【NOIP2017提高A组模拟7.13】好数

    Description 我们定义一个非负整数是"好数",当且仅当它符合以下条件之一: 1.这个数是0或1 2.所有小于这个数且与它互质的正整数可以排成一个等差数列例如,8就是一个好 ...

  9. JZOJ 100041. 【NOIP2017提高A组模拟7.12】列车调度

    Description Input Output Sample Input Sample1: 3 1 2 3 Sample2: 9 1 3 2 4 8 6 9 5 7 Sample Output Sa ...

  10. JZOJ 100030. 【NOIP2017提高A组模拟7.8】为了爱情

    Description Input 输入文件第一行包含一个正整数 k.之后是 k 组测试用例. 每组测试用例的第一行为一个整数 n.接下来 n 行,每行 n 个以空格隔开的数,用来 描述棋盘的初始状态 ...

最新文章

  1. python清洗数据去除停用词_Python从pandas数据帧中删除停用词
  2. 用纯CSS实现3D立方体效果
  3. jdk9与jdk11哪个好_JDK 9、10和11中的安全性增强
  4. FreeModbus TCP传输
  5. html5 序列帧播放器,Pdplayer 64位版(序列帧动画播放器)V1.0.7.33 免费版
  6. Maven 镜像设置
  7. EasyCVR人脸识别框在播放器上显示及消失的机制设定
  8. Android Intent跳转第三方地图应用,传入地址
  9. H5纯页面方式手机端实现“扫一扫”功能(不是直接调起摄像头)
  10. r语言中残差与回归值的残差图_独家 | 手把手教你用R语言做回归后的残差分析(附代码)-阿里云开发者社区...
  11. 室内眩光测量UGR测试系统
  12. java传递汉字翻译为英文_java写的能将汉字翻译成拼音的类
  13. Intellij IDEA 2019 激活码(注册码)
  14. 屏幕录制软件camtasia studio 8序列号激活
  15. 苹果cms简洁精美影视模板整站源码
  16. 笔记本虚拟机 安装红旗linux x86,在红旗linux中安装vmware虚拟机
  17. linux服务器实训心得体会,linux服务器实训心得体会
  18. 关于地铁查询系统的总结
  19. 牛视源码,抖音矩阵系统定制,look here
  20. 苹果2011年全球开发者大会图文实录

热门文章

  1. 想学python网课哪个好过_python入门:想学python网课哪个好?
  2. python oserror怎么解决_Python读取csv报错解决方法:OSError: Initializing from file failed
  3. 每天学点统计学——指数
  4. 冒泡详解(分析每一步)
  5. 笔记本计算机风扇连线,机箱风扇电源怎么接线?机箱风扇接口知识及接法图解教程...
  6. 每个客户看待期货开户公司的角度不一样
  7. 搭建以图搜图检索系统
  8. 华为路由器hilink怎么用_华为HiLink是什么?华为hilink智能联网怎么用
  9. 爆火GitHub 的十大最火 Python 项目,三天收藏突破10w+
  10. 【渝粤题库】陕西师范大学165102管理心理学 作业(高起专)