BZOJ4919: [Lydsy1706月赛]大根堆(set启发式合并)
题意
题目链接
Sol
如果给出的树是链的话显然就是LIS
不是链的时候直接当链做,每个节点维护一个multiset表示计算LIS过程中的单调栈
启发式合并即可
时间复杂度:$O(nlog^2n)$
#include<bits/stdc++.h> #define sit multiset<int>::iterator using namespace std; const int MAXN = 2e5 + 10; inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f; } vector<int> v[MAXN]; multiset<int> s[MAXN]; int N, val[MAXN]; void dfs(int x, int fa) {for(int i = 0; i < v[x].size(); i++) {int to = v[x][i];if(to == fa) continue;dfs(to, x);if(s[to].size() > s[x].size()) swap(s[to], s[x]);for(sit it = s[to].begin(); it != s[to].end(); it++)s[x].insert(*it);s[to].clear();}sit it = s[x].lower_bound(val[x]);if(it != s[x].end()) s[x].erase(it);s[x].insert(val[x]); } main() {N = read();for(int i = 1; i <= N; i++) {val[i] = read();int x = read();v[i].push_back(x); v[x].push_back(i);}dfs(1, 0);printf("%d", s[1].size());return 0; }
BZOJ4919: [Lydsy1706月赛]大根堆(set启发式合并)相关推荐
- bzoj4919 [Lydsy1706月赛]大根堆
Description 给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点.每个点有一个权值v_i. 你需要将这棵树转化成一个大根堆.确切地说,你需要选择尽可能多的节点,满足大根堆的性质: ...
- 【BZOJ4919】【Lydsy1706月赛】大根堆(启发式合并,DSU on tree)
Description 给定一棵nnn个节点的有根树,编号依次为1" role="presentation" style="position: relative ...
- JZOJ 5609. 【NOI2018模拟3.28】Tree BZOJ 4919: [Lydsy1706月赛]大根堆
#Description 给你一颗有 n 个点的树,其中 1 号点为根节点,每个点都有一个权值 vali 你可以从树中选择一些点,注意如果 i 与 j 都被选中且 j 在 i 的子树内,那么必须满足 ...
- YBTOJBZOJ:大根堆(启发式合并)
解析 如果到了链上,本题就是求LIS. 考虑LIS的常见队列做法,其本质就是维护长度为 xxx 的序列的结尾的最小值 qxq_xqx. 那么在本题尝试如法炮制,对于每个节点,都开一个队列,qxq_x ...
- [bzoj4919] 大根堆
[bzoj4919] 大根堆 暴力dp都会吧,多加一维记最大值,然后我们线段树合并来优化转移就行了. 代码 #include<bits/stdc++.h> using namespace ...
- 【十二省联考】春节十二响【贪心】【堆】【启发式合并】
传送门 题意:给一棵nnn个点带点权的树,要求把点分成若干部分,有祖孙关系的点不能在同一部分.求每个部分最大值 的和 的最小值. n≤2×105n \leq 2\times 10^5n≤2×105 由 ...
- P7011-[CERC2013]Escape【堆,启发式合并】
正题 题目链接:https://www.luogu.com.cn/problem/P7011 题目大意 给出nnn个点的一棵树,从一出发,要走到 ttt.初始时权值为000,每个节点有一个权值wiw_ ...
- 2021牛客OI赛前集训营-树数树【树上启发式合并,堆】
正题 题目链接:https://ac.nowcoder.com/acm/contest/20107/C 题目大意 给出nnn个点的一棵树,求一个最长的序列使得数字互不相同且相邻编号节点的都是祖孙关系. ...
- bzoj4919 大根堆
考虑二分求序列LIS的过程. g[i]表示长度为i的LIS最小以多少结尾. 对于每个数,二分寻找插入的位置来更新g数组. 放到树上也是一样,额外加上一个合并儿子的过程. 发现儿子与儿子直接是互不影响的 ...
最新文章
- 大数据时代,如何根据业务选择合适的分布式框架
- java实现最长连续子序列_最长公共子序列/最长公共子串 Python/Java实现
- gevent.joinall()开启协程
- 美国银行将AI应用于企业应收账款处理
- linux显示文本文件指定行数的数据
- com.mysql.jdbc.PacketTooBigException,及mysql 设置 max_allow_packet
- Windows环境下32位汇编语言程序设计笔记-基础篇
- 25年前的预言(转贴一篇,事实胜于雄辩)
- UI自动化测试篇 :Selenium2(Webdriver)TestNG自动化测试环境搭建
- PAIP。AHK IDE及相关DOC
- Nodejs写的搬家工具知识分享
- 杭州端点科技java,端点实习面试(一面)
- Excel文件双击打开后无内容且不可编辑,再次双击文件正常显示
- 数字化转型的三个重点方向
- 颠覆性AI程序:人工智能如何推动天文学创新?
- 阿里云容器kubernetes发布nacos2.0.3步骤
- 渗透测试学习笔记20.11.20
- Photoshop 2020MAC最新版下载地址 一键安装
- 电流源和电压源的内阻问题
- Android BLE 蓝牙实践
热门文章
- TypeError: strptime() takes no keyword arguments ValueError(“‘%s‘ is a bad directive in format ‘%s‘“
- 哪些行业用到GPS定位系统_GPS平台_GPS定位平台系统,定位监控系统平台
- WIN10中 提示“Win键已禁用”的解决方法
- 在Linux上yum安装snmp,centos7配置安装snmp
- c语言数字1 9转换英文,C语言提问:将一个月份数字转换成月份的英文名称
- 【Spark】--SparkCore6
- 【图像分割】基于方向谷形检测实现静脉纹路分割附MATLAB代码
- 流放者柯南自建服务器 linux,流放者柯南个人服务器搭建教程 怎么搭建个人服务器...
- 嵌入式OCR+RFID识别电子护照阅读器模块MRZ码电子证件识别模组的应用与攻略
- 【中等】Leetcode-旋转链表//题目分析//首尾相连