[BZOJ4919][Lydsy六月份月赛 .C][树上DP][启发式合并]大根堆

bzoj4919 大根堆(线段树合并) bzoj4919 也是雅礼集训考的一题。。。 似乎不必要用线段树合并,用个set也能又好又快的水过去。。。 先考虑最简单的树形dp怎么做; 设dp[i][j]表示当前在i节点并且选的最大不超过j的答案是多少; 考虑用动态开点的线段树来维护dp数组 对于每一个节点,只需要先把其儿子的dp数组加起来,这就对应线段树合并操作;又因为我用的标记永久化,每一次修改对应区间直接相加; 再根据自... 阅读详情

用f[i][j]表示第i个节点,最大的为j且满足条件的大根堆的大小
现场写了一个很鬼畜的线段树合并DP数组……一直RE加上时间不够就弃疗了
不过好像是有类似的做法,先挖个坑……

题解很妙啊,考虑链上的情况就是求LIS,求LIS可以用f[i]表示长度为i的子序列的最大是多少然后二分维护,那么放到树上同样可以做,用set维护。子树之间互不影响,直接启发式合并,父节点在子树合并得到的set中找到第一个大于等于它的元素删掉,然后把自己插进去,最后根节点set的大小就是答案

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <set>

using namespace std;

const int N=200010;

int n,cnt,x;
int G[N],a[N];
struct edge{
  int t,nx;
}E[N<<1];

multiset<int> f[N];

inline char nc(){
  static char buf[100000],*p1=buf,*p2=buf;
  return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}

inline void rea(int &x){
  char c=nc(); x=0;
  for(;c>'9'||c<'0';c=nc());for(;c>='0'&&c<='9';x=x*10+c-'0',c=nc());
}

inline void add(int x,int y){
  E[++cnt].t=y; E[cnt].nx=G[x]; G[x]=cnt;
  E[++cnt].t=x; E[cnt].nx=G[y]; G[y]=cnt;
}

#define V E[i].t

void dfs(int x,int p){
  for(int i=G[x];i;i=E[i].nx)
    if(V!=p){
      dfs(V,x);
      if(f[V].size()>f[x].size()) swap(f[x],f[V]);
      for(set<int>::iterator j=f[V].begin();j!=f[V].end();j++)
    f[x].insert(*j);
      f[V].clear();
    }
  if(f[x].size()>0&&f[x].lower_bound(a[x])!=f[x].end()) f[x].erase(f[x].lower_bound(a[x]));
  f[x].insert(a[x]);
}

int main(){
  rea(n); rea(a[1]); rea(x);
  for(int i=2;i<=n;i++)
    rea(a[i]),rea(x),add(x,i);
  dfs(1,0);
  printf("%d\n",(int)f[1].size());
  return 0;
}

BZOJ4919 大根堆 Description 给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点。每个点有一个权值v_i。你需要将这棵树转化成一个大根堆。确切地说,你需要选择尽可能多的节点,满足大根堆的性质:对于任意两个点i,j,如果i在树上是j的祖先,那么v_i&gt;v_j。请计算可选的最多的点数,注意这些点不必形成这棵树的一个连通子树。 Input 第一行包含一个正整数n(1&lt;=n&lt;... 阅读详情

相关推荐

8,9,10,11,12,13代CPU特制win7 64位系统

对于7代以上的CPU装win7,在UEFI的模式下,如果不提前注入显卡驱动,就会一直卡在LOGO界面。对于此情况,我们推出一个内置了显卡和USB驱动的特制版win7系统。由于单文件已经大于了4G,所以推荐使用rufus来写入镜像安装。如还有问题,请记录下电脑配置,联系QQ11717907。制作完成以后,就可以通过U盘启动安装了。

海康威视技术支持 7250

【BZOJ4919】【Lydsy1706月赛】大根堆(启发式合并,DSU on tree)

Description 给定一棵nnn个节点的有根树,编号依次为111到nnn,其中111号点为根节点。每个点有一个权值viviv_i。 你需要将这棵树转化成一个大根堆。确切地说,你需要选择尽可能多的节点,满足大根堆的性质:对于任意两个点i,ji,ji,j,如果i在树上是j的祖先,那么vi&amp;gt;vjvi&amp;gt;vjv_i&gt;v_j。 请计算可选的最多的点数,注意这些点不必形成这棵树的一个连通...

დ♂Hany01's Blog Space♂ღ 627

红队内网攻防渗透:内网渗透之内网对抗:实战项目&VPC1打靶&PHP-RCE&三层代理路由&防火墙上线&密码喷射&域控提权

上面已经抓取到了密码,但是我们通过拓扑分析看,要想上线win10只能通过正向shell,因为win7的防火墙是开的,win10反向主动连接肯定入站规则拦截,而win10自己没有开防火墙,所以win7主动正向连接就可以上线。win7开启了防火墙,入站规则肯定是会拦截我们的请求的,所以我们需要反向上线,让win7主动来连接我们。这里扫描发现是存在ms17010漏洞的,但是想上线192.168.2.142的话,我们没有路由是上线不了的,这里有两种办法:一种msf直接生成后门,另一种cs移植后门到msf。

HACKONE的博客 909

Lydsy(大视野2017八月份月赛)D--

Problem D: 字符串大师 Time Limit: 1 Sec  Memory Limit: 256 MB Submit: 164  Solved: 47 [Submit][Status][Discuss] Description 一个串T是S的循环节,当且仅当存在正整数k,使得S是T^k(即T重复k次)的前缀,比如abcd是abcdabcdab的循环节 。给定一个长度为n的

沉醉不知归路 686

基于STM32设计的老人摔倒检测报警系统(OneNet+MQTT)(235)

基于STM32设计的老人摔倒检测报警系统,不仅能够实时监测老人的位置信息,方便在紧急情况下快速定位,还能通过陀螺仪模块精确检测老人的身体姿态,一旦判断为摔倒状态,系统将立即触发蜂鸣器报警,并通过4G网络向指定联系人发送短信警示,确保老人能够迅速得到援助。此外,系统还支持老人主动按下设备上的按键发送求助短信,增强了系统的灵活性和实用性。

4691

多模态脑区细分图谱 HCP-MMP v1.0, Glasser et al. 2016 皮层和皮下区域,简写和全称对应关系

人类连接组计划多模态脑区细分图谱(HCP-MMP)提供了对人类大脑皮层区域的非常有用的细分(Glasser et al. 2016a, b)。图谱是多模态的,因为每个区域都是根据四个标准的组合定义的,包括结构(T1加权/T2加权髓鞘含量和皮层厚度图)、静息态功能连接、基于任务的激活和拓扑地形组织。HCP-MMP v1.0图谱包含每个半球180个皮层区域,基于210名参与者的分析。

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 2619

BZOJ4919 大根堆(线段树合并)

### 题目描述 给定一个$n$个节点的的有根树,编号依次为$1$到$n$,其中$1$号节点为根节点。每个点有一个权值$v_i$。 你需要将这棵树转化为一个大根堆。确切地说,你需要找到尽可能多的节点,满足大根堆的性质:对于任意两个点$i,j$,如果$i$在树上是$j$的祖先,那么$v_i>v_j$。 请计算可选的最多的点数,注意这些点不必形成这棵树的一个连通子树。

tanjunming2020的博客 1504

最适合入门的100个深度学习项目

本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 12万+

【BZOJ4919】【Lydsy1706月赛】大根堆

【题目链接】点击打开链接【思路要点】显然有\(O(N^2)\)的DP,用线段树维护每一个点的DP数组,用线段树合并支持转移。注意DP数组是单调的,可以将区间取最大值操作看做区间赋值操作。时间复杂度\(O(NLogN)\)。【代码】#include&lt;bits/stdc++.h&gt; using namespace std; const int MAXN = 2e5 + 5; const in...

cz_xuyixuan的博客 444

CADENCE 25.1打开元件库ERRORCannot perform the operation because of an exception.

摘要:解决CADENCE25.1打开元件库报错"ERRORCannotperformtheoperationbecauseofanexception"的方法:该错误通常由软件中文设置导致。解决方案为:进入Options→Preferences→MorePreferences,取消勾选两个本地语言选项后重启软件即可恢复正常。此方法简单有效,能快速解决因语言设置导致的元件库访问异常问题。(98字)

0 1015

【RT-DETR有效改进】全新的SOATA轻量化下采样操作ADown(轻量又涨点,附手撕结构图)

本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的ADown模块来改进我们的Conv模块,其中YOLOv9针对于这个模块并没有介绍,只是在其项目文件中用到了,我将其整理出来用于我们的YOLOv8的项目,经过实验我发现该卷积模块(作为下采样模块)首先可以大幅度降低参数值,其次其精度上也有很高的提升,同时本文的内容目前网络上并无其它人总结(也是最新发布的,可以说BUff是集满了)大家可以尝试以下在自己数据集上的效果。

Snu77的博客 4770

Lydsy2457 双端队列(双端队列思想)

问题试求至少用几个双端队列可排序 那么我们不妨换过来思考,将数列排好序后,再来找队列个数 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct my{ int x,id; }; const int maxn...

allia990718的博客 208

Python实战项目2:b站评论采集

本文不对数据采集的过程做探讨,直接上代码。

lyccomcn的博客 3199

BZOJ4919 大根堆(multiset)

我们将每个点的各个儿子中子树的节点数量最多的儿子称为重儿子,重儿子连成的链称为重链。那么每次先遍历重儿子,再将当前节点的multiset序列和其重儿子的multiset序列互换。对于每个节点,先遍历其子树,然后将该节点的儿子节点的最长上升子序列合并到自己的序列上。最后,在自己的序列上找到第一个大于等于该节点的权值的位置。如果有,将其在序列上删去,再把该节点的权值加在序列中;最后,根节点的序列的长度就是答案。请计算可选的最多的点数,注意这些点不必形成这棵树的一个连通子树。个数的最长上升子序列,在加入第。

tanjunming2020的博客 1408

陶氏膜设计软件.rar

陶氏膜设计软件

安防相关的11个yolo模型onnx

安防相关的11个yolo模型onnx01_PPE检测_YOLO.onnx01车牌识别YOLOv8.onnx01打架检测_YOLO_nano.onnx01 跌倒检测YOLOv12m.onnx01烟火检测YOLOv8n.onnx02_安全帽检测_YOLOv8s.onnx02打架检测_YOLO small.onnx02森林火灾检测 YOLOv8.onnx02武器检测_YOLOv8.onnx03跌倒检测YOLO.onnx03碰撞烟火检测 YOLOv11.onnx

2021-06-14 BZOJ4919:大根堆

BZOJ4919:大根堆 Description: 题目描述   给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点。每个点有一个权值v_i。 你需要将这棵树转化成一个大根堆。确切地说,你需要选择尽可能多的节点,满足大根堆的性质:对于任意两个点i,j,如果i在树上是j的祖先,那么v_i>v_j。 请计算可选的最多的点数,注意这些点不必形成这棵树的一个连通子树。 输入格式   第一行包含一个正整数n(1<=n<=200000),表示节点的个数。 接下来n行,每行两个整数v_i,p

qq_54674614的博客 247

Altera-MAX10 10M50DAF484 fpga开发板资料Cadence硬件原理图+PCB+Verilog例程源码+文档资料.zip

Altera_MAX10 10M50DAF484 fpga开发板资料Cadence硬件原理图+PCB+Verilog例程源码+文档资料

[lydsy] 3224 普通平衡树 [Splay]

问题描述您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入x数 删除x数(若有多个相同的数,因只删除一个) 查询x数的排名(若有多个相同的数,因输出最小的排名) 查询排名为x的数 求x的前驱(前驱定义为小于x,且最大的数) 求x的后继(后继定义为大于x,且最小的数) 输入格式: 第一行为n,表示操作的个数,下面n行每行有两个数opt和x,opt表示操作的序号(1<

chutzpah 546

复杂曲面零件五轴数控加工理论与技术 - 毕庆贞,丁汉,王宇晗著 - 2016

复杂曲面零件五轴数控加工理论与技术 - 毕庆贞,丁汉,王宇晗著 - 2016

LYDSY模拟赛day3 平均数

【 问题描述】有一天, 小 A 得到了一个长度为 n 的序列。他把这个序列的所有连续子序列都列了出来, 并对每一个子序列都求了其平均值, 然后他把这些平均值写在纸上, 并对它们进行排序,最后他报出了第 k 小的平均值。你要做的就是模仿他的过程。【 输入格式】第一行两个整数 n,k, 意义如题中所述。第二行 n 个正整数, 即为小 A 得到的序列。【 输出格式】一行一个实数, 表示第 k ...

weixin_30396699的博客 171

[Lydsy1706月赛]大根堆 乱搞+启发式合并

Descripition 给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点。每个点有一个权值v_i。 你需要将这棵树转化成一个大根堆。确切地说,你需要选择尽可能多的节点,满足大根堆的性质:对于任意两个点i,j,如果i在树上是j的祖先,那么v_i&amp;amp;gt;v_j。 请计算可选的最多的点数,注意这些点不必形成这棵树的一个连通子树。 Sample Input 6 3 0 1...

xgc_woker的博客 357

Lydsy2017省队十连测

5215: [Lydsy2017省队十连测]商店购物 可能FFT学傻了,第一反应是前面300*300背包,后面FFT... 实际上前面背包,后面组合数即可.只是这是一道卡常题,需要注意常数.. 1 //Achen 2 #include<algorithm> 3 #include<iostream> 4 #include<cstring&gt...

weixin_30662849的博客 219

【bzoj 4919】大根堆(set启发式合并)

传送门biu~ 假设是在序列上,就变成了nlogn的dp求最长上升子序列问题;假设是在树上,我们只需要在每个节点存下dp数组,然后用set的启发式合并将dp数组合并就可以了(代替Splay)。 #include&lt;bits/stdc++.h&gt; #define N 200005 using namespace std; vector&lt;int&gt;e[N]; multise...

zP1nG 581

JZOJ 5609. 【NOI2018模拟3.28】Tree & BZOJ 4919: [Lydsy1706月赛]大根堆

JZOJ 5609. 【NOI2018模拟3.28】Tree &amp; BZOJ 4919: [Lydsy1706月赛]大根堆 Description给你一颗有 n 个点的树,其中 1 号点为根节点,每个点都有一个权值 vali 你可以从树中选择一些点,注意如果 i 与 j 都被选中且 j 在 i 的子树内,那么必须满足 vali &gt;valj 请你求出最多能同时选出多少个点Input第一行一个正整数 n 下接

Felix-Lee的博客 409

BZOJ 5097: [Lydsy1711月赛]实时导航(最短路 + bitset)

题意 \(n​\) 个点的有向图,边权 \(\in \{1, 2, 3, 4\}​\) ,\(m​\) 次修改边权/加边/删边,\(q​\) 次询问:以 \(s_i​\) 为起点,输出它到其他点的最短路。 \(n ≤ 5 \times 10^2 ,m \le 5 \times 10^4 , q \le 5 \times 10^3\) 题解 这图很密,如果修改就做一遍 \(Dijsktra\) 是 ...

weixin_30332241的博客 161

BZOJ 3123 森林 主席树启发式合并

Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号。保证1≤testcase≤20。 第二行包含三个整数N,M,T,分别表示节点数、初始边数、操作数。第三行包含N个非负整数表示N个节点上的权值。 接下来M行,每行包含两个整数x和y,表示初始的时候,点x和点y之间有一条无向边,...

weixin_30847939的博客 138

https://lydsy.download/archive/

https://lydsy.download/archive/ 转载于:https://www.cnblogs.com/zhangbuang/p/10393701.html

weixin_30916125的博客 265

YBTOJ&BZOJ:大根堆(启发式合并)

树上LIS

BUG_Creater_jie的博客 315

Lydsy月赛合辑

前言 不想单开的就写在这里了 都还是挺不错的啊 权限题没有 4886 又是被OZY秒杀的我 不考虑严格大于的话你直接ai,bi取个max就过了… 现在要考虑严格大于,相当于每个矩形,都是一条在ai,bi中的边 我们定义这个数被作为一次长,当且仅当有一条新的边指向了他 最后我们就要给所有边定向,显然要求每个数最多只有一个入度,贡献就是出度*权值 显然所有的连通块要不就是环套树要不就是树 是树的很简单...

Rose_max的博客 399
上一篇: [BZOJ4921][Lydsy六月份月赛 .E][二分][瞎搞]互质序列
下一篇: [BZOJ4920][Lydsy六月份月赛 .D][数学][三分]薄饼切割
LowestJN
博客等级 码龄10年 76粉丝 422原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值