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数组. 放到树上也是一样,额外加上一个合并儿子的过程. 发现儿子与儿子直接是互不影响的 ...
最新文章
- 慕课网基于ElasticSearch的找房网实战开发企业级房屋搜索网项目学习心得(一)
- jira4.4.5下载与汉化
- Java 接口小总结;
- 0327 ARM 裸奔学习总结
- flutter开发仿抖音首页面上下滑动切换播放视频效果
- SQL函数大全(转)
- #动态规划 LeetCode 120 三角形最小路径和
- linux rpm安装简要说明
- window.open实现post方式复杂参数传递
- win10系统如何查找字体库位置+在matplotlib散点图中的应用+散点图中显示不了中文
- 小甲鱼【C语言】《带你学C带你飞》笔记
- 金融经济学期末梳理(王江)第七章 风险厌恶程度度量
- 超图软件裁剪倾斜数据
- 2021辽宁省大学生程序设计竞赛 题解
- Google中国产品不断升级改进 继续招聘优秀人才
- C++:重定义:符号重定义:变量重定义(二):解决变量重定义(const static)
- win10子系统ubuntu16.04安装HOS-NWT全过程
- 双目摄像头——活体检测
- laravel mysql 数组_PHP如何使用laravel 5将数据从数组保存到mysql
- go mod init出错
热门文章
- 如何发布日历提醒推送消息服务器,iOS开发 -- 通过app向手机自带的日历中添加事件提醒...
- HJ95 人民币转换
- 解决Please make sure you have the correct access rights and the repository exists 问题
- 一个故事讲解公钥私钥和数字签名,很深刻!
- pg预热插件pg_prewarm
- 喜讯!神策数据荣登 2022 年度数字化保险百强榜
- CentOS7安装Docker-Registry
- 哪些行业适合开发小程序商城
- 【烧录问题】flymcu下载出现从08000000开始运行失败
- 计算机的储存器包括内存储器和外存储器,内存储器和外存储器的分类与区别