F - LIS on Tree
F - LIS on Tree (atcoder.jp)
问题描述:树上LIS。
普通LIS。O(n * n)。
void solve() {int n; cin>>n;vector<int> f(n + 1),a(n+1);for(int i = 1; i <= n; ++i) {cin>>a[i];f[i] = 1;for(int j = 1; j < i; ++j) {if(a[i] > a[j]) f[i] = max(f[i], f[j] + 1);}}cout<<*max_element(all(f));
}
二分优化。O(n * log(n))。
/// 版本1
void solve() {vector<int> f;int n; cin>>n;for(int i = 0; i < n; ++i) {int t; cin>>t;auto pos = lower_bound(all(f), t);if(pos == f.end()) f.push_back(t);else *pos = t;}cout<<f.size();
}
/// 版本2
void solve() {int n; cin>>n;vector<int> f(n,INF);int ans = -1;for(int i = 0; i < n; ++i) {int t; cin>>t;int pos = lower_bound(all(f), t) - f.begin();f[pos] = t;ans = max(ans, pos);}cout<<ans + 1;
}
对于树上LIS来说,如果只考虑一条链的话,就是裸LIS。由于对于一个父节点,它的儿子节点都共用父节点往上的那一条链上的权值,而且遍历完1个儿子节点,对其余的儿子节点的操作中需要将这个儿子节点的操作撤销掉。这个撤销很像回溯。数据范围很大,需要LIS优化,如果用版本1的LIS,每次需要判断是改回还是删除,可能删除这个操作会超时;用版本2的LIS,只需要考虑改回就行,更简单些。
具体代码思路:无向树建树。遍历到节点u时,计算到这个节点u的LIS长度,之后将节点u的权值加入到LIS数组中,找儿子节点,最后再将 “之前节点u的权重加入到LIS数组中” 的这一步进行回溯/撤销。
具体代码:
// 版本2 AC代码
void solve() {int n; cin>>n; vector<vector<int>> g(n+1);vector<int> val(n + 1),f(n+1, INF), ans(n + 1);for(int i = 1; i <= n; ++i) cin>>val[i];for(int i = 1; i < n; ++i) {int u,v; cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}auto dfs = [&](auto &&dfs, int u, int fu) -> void {// 找到第一个大于等于val[u]的位置int pos = lower_bound(f.begin()+1, f.end(), val[u]) - f.begin(); int tmp = f[pos]; // 记录这个位置的权重,因为要撤销/回溯f[pos] = val[u]; // 将pos位置更改为val[u]ans[u] = max(ans[fu], pos); // 求LIS长度for(auto y: g[u]) {if(y == fu) continue;dfs(dfs, y,u);}// 进行撤销操作f[pos] = tmp;};dfs(dfs, 1, 0);for(int i = 1; i <= n; ++i) cout<<ans[i]<<endl;
}
// 版本1 RE代码 可能还有错误没有找到》
void solve() {int n; cin>>n; vector<vector<int>> g(n+1);vector<int> val(n + 1),f, ans(n + 1);for(int i = 1; i <= n; ++i) cin>>val[i];for(int i = 1; i < n; ++i) {int u,v; cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}auto dfs = [&](auto &&dfs, int u, int fu) -> void {int tag = 0;auto pos = lower_bound(all(f), val[u]);int len = pos - f.begin() + 1;if(pos == f.end()) {tag = -1;f.push_back(val[u]);} else {tag = *pos;*pos = val[u];}ans[u] = len;for(auto y: g[u]) {if(y == fu) continue;dfs(dfs, y,u);}if(tag == -1) {f.erase(f.end()-1);} else *pos = tag;};dfs(dfs, 1, 0);for(int i = 1; i <= n; ++i) cout<<ans[i]<<endl;
}
相关文章:
F - LIS on Tree
F - LIS on Tree (atcoder.jp) 问题描述:树上LIS。 普通LIS。O(n * n)。 void solve() {int n; cin>>n;vector<int> f(n 1),a(n1);for(int i 1; i < n; i) {cin>>a[i];f[i] 1;for(int j 1; j < i; j) {if(a[i] > a[j]) f[i] max…...
2023 年全国大学生数学建模B题目-多波束测线问题
B题目感觉属于平面几何和立体几何的问题,本质上需要推导几何变换情况,B题目属于有标准答案型,没太大的把握不建议选择,可发挥型不大。 第一问 比较简单,就一个2维平面的问题,但有点没理解,这个…...
qt creater11 翻译国际化教程教程:
先出效果图。 闲聊几句:qt这个翻译很方便,能直接导出项目里所有文字。 具体步骤如下: 在Qt中,我们可以使用QTranslator类来实现多语言切换。以下是一般步骤: 1. 在你的源代码中,所有需要翻译的字符串都…...
【AWS实验 】在 AWS Fargate 上使用 Amazon ECS 部署应用程序
文章目录 实验概览目标实验环境任务 1:连接到实验命令主机任务 2:将应用程序容器化任务 3:构建 Web2048 容器任务 4:创建 Amazon ECR 存储库并推送 Docker 映像任务 5:创建 ECS 集群任务 6:测试应用程序总结…...
matlab几种求解器的选择fsolve-sole-vpasolve
文章目录 fsolvesolvevpasovle总结vpasovle的结果fsovle的结果 fsolve 求数值解 result_xfsolve(my_fun,x0,options)参数: my_fun:待求解函数,作为一个.m文件 x0:初始值,向量,可以仅仅指定其中的几项solve 强大的求解器。在方程组中求解析…...
无限访问 GPT-4,OpenAI 强势推出 ChatGPT 企业版!
继 ChatGPT 收费大降价、推出 App 版等系列动作之后,OpenAI 于今日宣布正式发布面向企业的 AI 助手——ChatGPT Enterprise 版。 与 To C 端的 ChatGPT 版本有所不同的是,该版本可以以更快速度无限制地访问 GPT-4,还可以用来处理更长输入的上…...
MySQL的故事——Schema与数据类型优化
Schema与数据类型优化 一、选择优化的数据类型 更小的通常更好 应该尽量使用可以正确存储数据的最小类型,更小的数据类型通常更快,因为他们占用更少的磁盘,内存和CPU缓存,并且处理时需要的CPU周期更少 简单就好 更简单的数据类型…...
C++编译和链接
编译和链接 一、源代码的组织 头文件(.h):#include头文件、函数的声明、结构体的声明、类的声明、模板的声明、内联函数、#define和const定义的常量等。 源文件(.cpp):函数的定义、类的定义、模板具体化的…...
【CSDN技术】Markdown编辑器如何使用-csdn博客编写入门
Markdown编辑器如何使用-csdn博客编写入门 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自…...
【docker】运行redis
拉取redis镜像 有多种选择: redis(基础版)redis/redis-stack(包含redis stack server和RedisInsight)redis/redis-stack-server(仅包含redis stack server) docker pull redis docker pull r…...
Paddle训练COCO-stuff数据集学习记录
COCO-stuff数据集 COCO-Stuff数据集对COCO数据集中全部164K图片做了像素级的标注。 80 thing classes, 91 stuff classes and 1 class ‘unlabeled’ 数据集下载 wget --directory-prefixdownloads http://images.cocodataset.org/zips/train2017.zip wget --directory-prefi…...
SpringBoot 框架学习
java 学习笔记指路 基础知识 Python转java补充知识 Java中常见的名词解释 前端 【黑马程序员pink老师前端】HTML 【黑马程序员pink老师前端】JavaScript基础大总结 【黑马程序员pink老师前端】JavaScript函数与作用域 【黑马程序员pink老师前端】JavaScript对象 数据库 【黑马程…...
java - lua - redis 完成商品库存的删减
java调用lua脚本完成对商品库存的管理 主页链接 微风轻吟挽歌的主页 如若有帮助请帮忙点赞 //lua脚本 获取到内存不够的商品StringBuilder sb new StringBuilder();//定义一个数组存储可能缺少库存的值sb.append(" local table {} ");//获取值sb.append(" …...
dbeaver离线安装clickhouse连接驱动
Clickhouse 数据库连接工具——DBeaver 主要介绍了Clickhouse 数据库连接工具——DBeaver相关的知识,希望对你有一定的参考价值。 Clickhouse 数据库连接工具——DBeaver 1.下载 DBeaver 和 连接驱动 https://dbeaver.io/files/dbeaver-ce-latest-x86_64-setup.…...
2024腾讯校招后端面试真题汇总及其解答(二)
11.如果同时有5个任务在10分钟之后提交,或者更多,那么如果是一个个从队列中拿数据,那么前一个任务会影响后续任务执行时间,说一下解决思路 你的问题是一个典型的并发处理问题。如果你的系统是单线程的,那么的确,前一个任务的执行时间会影响后续任务的执行时间。但是,你…...
datagrip 相关数据连接信息无缝迁移
背景 因为公司换电脑了,接触的项目比较多,不同项目,不同环境的数据库连接有好几十个,如果在新电脑上挨个重新连接一遍劳心劳力,所以想看一下能不能直接将之前保存的连接信息直接迁移到新的电脑上面。 为此,…...
不就是G2O嘛
从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码 SLAM的后端一般分为两种处理方法,一种是以扩展卡尔曼滤波(EKF)为代表的滤波方法,一种是以图优化为代表的非线性优化方法。不过,目前SLAM研究的主…...
C#开发的OpenRA游戏之系统参数选项按钮
C#开发的OpenRA游戏之系统参数选项按钮 前面分析了信标按钮,从图上可以看到,靠右边的按钮,就是系统参数选项按钮: 这个按钮与前面三个按钮是不一样的,虽然它们在排列位置上是放在一起,但是处理的方法方式是不一样的,因为这个选项按钮,并不需要发命令给服务器,再返回来…...
苹果启动2024年SRDP计划:邀请安全专家使用定制iPhone寻找漏洞
苹果公司昨天(8月30日)正式宣布开始接受2024 年iPhone安全研究设备计划的申请,iOS 安全研究人员可以在 10 月底之前申请安全研究设备 SRD。 SRD设备是专门向安全研究人员提供的iPhone14Pro,该设备具有专为安全研究而设计的特殊硬…...
std::make_shared和new初始化智能指针的区别
先看代码: class Base {public:Base(int num):a(num) {std::cout << "Base() construct" << std::endl;}~Base() {std::cout << "Base() deconstruct" << std::endl;}int Get() {return a;}private:int a; };void tes…...
考公学习追踪器:用数据驱动备考,打造个人学习仪表盘
1. 项目概述:一个为“考公”学子量身定制的学习追踪器如果你正在准备公务员考试,或者身边有朋友在“考公”,那你一定对那种“学了忘,忘了学”的循环深有体会。行测的题海、申论的素材、时政的热点,每天的学习任务像一座…...
【工具分享】9款漏扫工具来了!(内附学习笔记)
【工具分享】9款漏扫工具来了!(内附学习笔记) 以下所有这些工具都是捆绑在一起的Linux发行版,如Kali Linux或BackBox,所以我会建议您安装一个合适的Linux黑客系统,尤其是因为这些黑客工具可以(自…...
PolyWin 多融易|预测赛道的崛起:当人工智能体开始理解未来
PolyWin 多融易|预测赛道的崛起:当人工智能体开始理解未来过去十年,互联网行业经历了从移动支付、数字资产、去中心化金融到人工智能的多轮变革。每一次技术升级,都会带来新的商业模式,也会重新定义市场对于“信息、数…...
STM32F4用HAL库驱动MPU6050,从引脚重映射到数据读取的保姆级避坑指南
STM32F4 HAL库驱动MPU6050全流程实战:从引脚重映射到数据解析的深度避坑指南 第一次接触STM32F4和MPU6050的组合时,我花了整整三天时间才让传感器吐出第一个有效数据。不是I2C通信失败,就是数据全为零,最崩溃的是明明按照教程操作…...
基于CircuitPython的嵌入式记忆游戏开发:状态机与TileGrid实战
1. 项目概述:一个嵌入式平台上的经典记忆配对游戏如果你玩过那种翻牌配对的记忆游戏,现在我们可以把它搬到一块小小的嵌入式开发板上,用CircuitPython来实现。这不仅仅是把游戏逻辑移植过来那么简单,它涉及到在资源受限的微控制器…...
书匠策AI:一个让论文小白也能“开挂“的毕业论文神器,到底有多能打?
各位同学,你有没有经历过这种崩溃时刻——毕业论文 deadline 倒计时,你的Word文档里只有标题,脑子里一片空白,选题没思路、大纲理不清、参考文献不会找,甚至连学校格式都搞不明白? 别慌,今天作…...
掌握CRC32校验码:从基础计算到高级逆向操作的完整指南
掌握CRC32校验码:从基础计算到高级逆向操作的完整指南 【免费下载链接】crc32 CRC32 tools: reverse, undo/rewind, and calculate hashes 项目地址: https://gitcode.com/gh_mirrors/cr/crc32 你是否曾遇到过需要验证文件完整性,却不知道如何下手…...
Steam Deck Windows控制器驱动深度配置指南
Steam Deck Windows控制器驱动深度配置指南 【免费下载链接】steam-deck-windows-usermode-driver A windows usermode controller driver for the steam deck internal controller. 项目地址: https://gitcode.com/gh_mirrors/st/steam-deck-windows-usermode-driver 想…...
用STM32 HAL库和MPU6050 DIY平衡小车:PID参数整定实战与小车‘站起来’的调试日记
STM32平衡小车PID调参实战:从剧烈抖动到稳定站立的调试手记 1. 平衡小车的核心挑战 当我第一次按下电源开关,看着这个小家伙像醉汉一样左右摇摆然后轰然倒下时,才真正理解到平衡控制的精妙之处。基于STM32和MPU6050的平衡小车项目,…...
基于Circuit Playground Express与MakeCode的阿基米德螺旋桨智能小船制作
1. 项目概述:当古老智慧遇见现代创客阿基米德螺旋,这个诞生于两千多年前的巧妙发明,最初被用来从低处向高处提水。它的核心原理简单而强大:一个旋转的螺旋面,能将流体或颗粒物沿着轴向“推”动。今天,我们不…...
