题解

这道题很显然可以想出来一个\(n^2\)的dp,也就是dp[u][i]表示以u为根的子树最大值是i的点集最大是多少(i是离散化后的值)

就是对于每个儿子处理出后缀最大值然后按位相加更新父亲,我们把最大值处理成差分来存储,儿子们的最大值按位相加等于差分按位相加,后缀最大值出现了变化仅当加入了父亲节点形成一个点集,也就是父亲节点的值w[u],所在的位置,跳过差分一串连续的0,遇到第一个有数的值,然后减掉,可以用map

代码

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <map>
#include <queue>
//#define ivorysi
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define mo 974711
#define MAXN 200005
#define eps 1e-3
#define RG register
#define calc(x) __builtin_popcount(x)
using namespace std;
typedef long long int64;
typedef double db;
template<class T>
void read(T &res) {res = 0;char c = getchar();T f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {res = res * 10 + c - '0';c = getchar();}res *= f;
}
template<class T>
void out(T x) {if(x < 0) {putchar('-');x = -x;}if(x >= 10) {out(x / 10);}putchar('0' + x % 10);
}
struct node {int to,next;
}E[MAXN * 2];
int head[MAXN],sumE,N,w[MAXN],a[MAXN],tot;
map<int,int> dp[MAXN];
void add(int u,int v) {E[++sumE].to = v;E[sumE].next = head[u];head[u] = sumE;
}
void merge(int u,int v) {if(dp[u].size() < dp[v].size()) swap(dp[u],dp[v]);for(auto k : dp[v]) dp[u][k.fi] += k.se;dp[v].clear();
}
void dfs(int u,int fa) {for(int i = head[u] ; i ;i = E[i].next) {int v = E[i].to;if(v != fa) {dfs(v,u);merge(u,v);}}map<int,int>::iterator k = dp[u].begin();if(k->fi >= w[u]) return;k = dp[u].lower_bound(w[u]);--k;if(k->se == 1) dp[u].erase(k);else k->se -= 1;
}
void Solve() {read(N);for(int i = 1 ; i <= N ; ++i) read(w[i]),a[i] = w[i];sort(a + 1,a + N + 1);tot = unique(a + 1,a + N + 1) - a - 1;for(int i = 1 ; i <= N ; ++i) w[i] = lower_bound(a + 1,a + tot + 1,w[i]) - a;for(int i = 1 ; i <= N ; ++i) dp[i][w[i]] = 1;int u;for(int i = 2 ; i <= N ; ++i) {read(u);add(u,i);add(i,u);}dfs(1,0);int ans = 0;for(auto k : dp[1]) ans += k.se;out(ans);enter;
}
int main() {
#ifdef ivorysifreopen("f1.in","r",stdin);
#endifSolve();return 0;
}

转载于:https://www.cnblogs.com/ivorysi/p/9145902.html

【LOJ】 #2521. 「FJOI2018」领导集团问题相关推荐

  1. Loj #3111. 「SDOI2019」染色

    Loj #3111. 「SDOI2019」染色 题目描述 给定 \(2 \times n\) 的格点图.其中一些结点有着已知的颜色,其余的结点还没有被染色.一个合法的染色方案不允许相邻结点有相同的染色 ...

  2. Loj #3055. 「HNOI2019」JOJO

    Loj #3055. 「HNOI2019」JOJO JOJO 的奇幻冒险是一部非常火的漫画.漫画中的男主角经常喜欢连续喊很多的「欧拉」或者「木大」. 为了防止字太多挡住漫画内容,现在打算在新的漫画中用 ...

  3. LOJ#2230. 「BJOI2014」大融合

    LOJ#2230. 「BJOI2014」大融合 题目描述 小强要在$N$个孤立的星球上建立起一套通信系统.这套通信系统就是连接$N$个点的一个树.这个树的边是一条一条添加上去的. 在某个时刻,一条边的 ...

  4. loj#2143. 「SHOI2017」组合数问题

    loj#2143. 「SHOI2017」组合数问题 题目描述 Solution 考虑转化一下我们要求的东西. ∑i=0n(nkik+r)=∑i=0n(nki)[i≡r(modk)]\sum_{i=0} ...

  5. LOJ#2542. 「PKUWC2018」随机游走

    LOJ#2542. 「PKUWC2018」随机游走 题目描述 Solution 去过一个点集中所有节点的期望时间不好求,考虑min−maxmin-maxmin−max容斥,转化为求第一次到达某一个点集 ...

  6. LOJ#2145. 「SHOI2017」分手是祝愿

    LOJ#2145. 「SHOI2017」分手是祝愿 题目描述 Solution 首先有一个结论: 灯的状态序列a1,a2...ana_1,a_2...a_na1​,a2​...an​唯一对应了一个最优 ...

  7. Loj #2568. 「APIO2016」烟花表演

    Loj #2568. 「APIO2016」烟花表演 题目描述 烟花表演是最引人注目的节日活动之一.在表演中,所有的烟花必须同时爆炸.为了确保安全,烟花被安置在远离开关的位置上,通过一些导火索与开关相连 ...

  8. Loj #2585. 「APIO2018」新家

    Loj #2585. 「APIO2018」新家 题目描述 五福街是一条笔直的道路,这条道路可以看成一个数轴,街上每个建筑物的坐标都可以用一个整数来表示.小明是一位时光旅行者,他知道在这条街上,在过去现 ...

  9. Loj #2983. 「WC2019」数树

    Loj #2983. 「WC2019」数树 题目背景 白兔喜欢树. 白云喜欢数数. 有 \(n\) 只鼠,白兔用 \(n − 1\) 根蓝色绳子把它们连成了一棵树,每根蓝色绳子连着两只鼠,白云用 \( ...

最新文章

  1. 卫星覆盖分析品质 FOM
  2. 无法打开锁文件 /var/lib/dpkg/lock - open (13: 权限不够) 无法对状态列表目录加锁(/var/lib/dpkg/),请查看您是否正以 root 用户运行?
  3. 【PAT乙级】1057 数零壹 (20 分)
  4. 2021-10-21 二叉堆 恋上数据结构笔记
  5. 求矩形中心点坐标编程c语言,c语言编程序求矩形面积 我是新手,很多不懂,初学...
  6. SpringMVC 配置文件实现(Tomcat)
  7. java httpresponse headres属性,Http Header里的Content-Type - 飞鸿影~ - 博客园
  8. 知识计算机硬件 教学设计,“计算机硬件系统”教学设计
  9. 转SFTP 和FTPS的区别是什么?
  10. 博客文件第二部分 Linux Shell高级编程技巧——第一章 深入讨论
  11. Yii Framework2.0开发教程(5)数据库mysql函数
  12. 天正自定义填充图案怎么添加_自定义AutoCAD填充图案教程 - CAD自学网
  13. 数字孪生CIM智慧城市BIM,城市cim可视化解决方案公司
  14. 苹果计算机格式化磁盘,如何格式化Mac电脑硬盘_给Mac电脑格式化硬盘的方法
  15. 不确定性原理的前世今生(转载)
  16. linux挂镜像文件作用是什么,linux下挂载iso镜像文件,linux挂载iso镜像文件
  17. 寒霜朋克计算机丢失,寒霜朋克无法启动运行解决方法 寒霜朋克不能运行怎么办?...
  18. python数据分析与可视化答案学堂云_智慧树知到_Python数据分析与数据可视化_最新答案...
  19. 微信支付--付款到零钱(java后端)
  20. html内联框架导航,html基本格式和内联框架

热门文章

  1. JAVA实现1到100的平方根之和_手算平方根和基于 Java BigInteger 的大整数平方根的实现...
  2. 代码和mysql服务器编码不一致_PL/SQL Developer教程:解决oracle服务器端和客户端字符编码不一致问题...
  3. 解压大于4g的文件_U盘容量还很大,拷贝时提示“文件太大”无法传输!
  4. eNSP中AC用Web方式登录
  5. 记某次CTF中Let me in
  6. mysql-5.5.38_MySQL-5.5.38通用二进制安装
  7. python编程基础之二十九
  8. LeetCode Convert Sorted List to Binary Search Tree 解题报告
  9. Python 2.7.X安装dpkt, sendpkt, pycap
  10. java 自带jar命令打包class文件