首页 > 其他分享 >CSP2024-19

CSP2024-19

时间:2024-09-13 21:24:53浏览次数:1  
标签:重构 min 19 max 路径 CSP2024 fa 节点

C

题意:给定一棵树,定义简单路径 \(x \to y\) 是好的当且仅当 \(x\) 是路径中编号最小值,\(y\) 是路径中编号最大值。\(n\le 10^6\)。

赛时双 log 做法:点分治,设路径端点 \(x\) 到分治之间的最小值为 \(\min\),最大值为 \(\max\)。

如果 \(x = \min\),A 中加入二元组 \((x, \max)\);\(x = \max\),B 中加入二元组 \((\min, x)\);其他情况不可能对答案产生贡献。

\((y, \max)\) 能和 \((\min, x)\) 拼成好的路径当且仅当满足 \(\max \le x\land \min \ge y\),离线二维数点。

正解:类似点分树的建立方式,建立一颗 "max重构树",具体来说,每次找到剩余树中最大的节点作为根,然后往下递归。

重要性质:所有满足 \(\max(y \to x)= x\) 的 \(y\) 都在 \(x\) 的子树中。

考虑 \(x\) 的父亲 \(fa\) 作为分治中心时的情况:

  1. 满足条件的路径一定不经过 \(fa\),即 \(y\) 不能是重构树上 \(fa\) 其他子树中的节点。
  2. 不能经过比 \(fa\) 还大的节点,即 \(y\) 不能是重构树上 \(fa\) 到根的链。
  3. 剩下有可能合法的答案都在 \(x\) 子树中,考虑充分性。\(y\) 不能经过 \(fa\),而 \(x\) 又是他子树中的最大值,显然有 \(\max(y \to x) = x\)。

同理建立 "min重构树",\((x, y)\) 能产生贡献当且仅当一棵树上 \(x\) 是 \(y\) 的祖先,另一棵上 \(x\) 属于 \(y\) 的子树。

预处理树 1 的 dfs 序。遍历树 2,每到一个节点就将其树状数组的权值改为 1,查询 \((in_x, out_x]\) 中有多少点权值为 1。

如何快速建树?从小到大枚举点 \(i\),将出边 \(j < i\) 所在连通块中最大点的父亲设为 \(i\)。时间复杂度 \(O(n\log n)\)。submission

加强版:CF1797F,支持动态挂叶子。

设max重构树为 T1,min重构树 为 T2。假设现在加入一个叶子 \(n + 1\),连向 \(v\)。

根据定义,显然 \(n + 1\) 只有唯一的方式加入两棵树:\(n\) 连向 \(n + 1\),作为 T1 的新根;\(n + 1\) 连向 \(v\),作为 T2 的叶子。

对答案的影响是什么呢?由于修改过后所有点都是 T1 中 \(n + 1\) 的子树节点,因此只要计算 T2 中有几个祖先即可。submission

标签:重构,min,19,max,路径,CSP2024,fa,节点
From: https://www.cnblogs.com/Luxinze/p/18412904

相关文章

  • P5985 [PA2019] Muzyka pop 题解
    P5985[PA2019]Muzykapop题解是蛮有意思的一道题。\(n\le200\),第一感觉是区间dp,但是又不好设出状态。考虑\(b\)单调递增的过程中的性质,考虑后得到\(b\)的最高含\(1\)的位一定是单调不降的,于是我们考虑将最高的含\(1\)的位设入状态。第一反应是设\(f_{i,j}\)表示......
  • python爬虫连载19
    条件判断语法:if(){ }else{}循环for循环:for(i=1;i<=100;i++){……}forin循环:for(variinstudents){……}while循环:while(){……}dowhile循环:do{……}while()函数使用function关键字定义。语法:function函数名称(参数a,参数b,……){……returnxxx;} XpathXPath可以用来处理XML......
  • P1020 [NOIP1999 提高组] 导弹拦截
    #include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=1e5+10;intn;inta[N];intq[N];signedmain(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); intx; while(cin>>x)a[++n]=x; intlen......
  • 19_删除链表的倒数第N个结点
    19_删除链表的倒数第N个结点【问题描述】给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。示例一:输入:head=[1],n=1输出:[]示例二:输入:head=[1,2],n=1输出:[1]提示:链表中结点的数目为sz1<=sz<=300<=Node.val<=1001<=n<=sz【算......
  • django特定地区冷链物流信息调度系统-计算机毕业设计源码92919
    特定地区冷链物流信息调度系统研究与应用摘要本研究针对特定地区的冷链物流信息调度系统进行了深入探索与实践。冷链物流作为一种特殊的物流方式,对于保障食品、药品等易腐产品的新鲜度和质量至关重要。然而,在特定地区,由于地理环境、经济水平和物流资源的限制,冷链物流面临着......
  • 【Canvas与密铺】90年代马赛克密铺效果 1920x1080
    【成图】【代码】<!DOCTYPEhtml><htmllang="utf-8"><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><head><title>20世纪90年代马赛克瓷砖效果1920x1080</title><styletype=&quo......
  • 用Python实现时间序列模型实战——Day 19: 时间序列中的异常检测与处理
    一、学习内容1.时间序列中的异常检测方法在时间序列分析中,异常检测是识别时间序列中不同于正常行为的点。这些异常点可能是由于数据记录错误、极端事件或系统故障引起的,常见的异常检测方法包括:基于统计的方法:Z-score:计算每个数据点与其均值的标准差距离,判断其是否为异常......
  • [极客大挑战 2019]BabySQL
    启动靶机熟悉的界面测试发现or被过滤且输入#号无法起到注释作用猜测本靶机考点过滤查询关键词语句or,union,select,and,by和注释符#测试后查询关键词发现过滤只是单次过滤可以使用aandnd,oorr,uunionnion等绕过过滤而#则可以用urlencode编码格式变成%23绕过,接下来我们进行......
  • 22319 Business Analysis (Capstone)
    22319 BusinessAnalysis(Capstone)Spring2024SubjectdescriptionTheaimofthissubject istodemonstrateand apply a framework for business analysis and valuation using both    financialandnon-financialdata.Theemphasisofthesubject......
  • [极客大挑战 2019]LoveSQL 1
    启动靶机作者不建议使用sqlmap我们这里就进行手工注入用万能口令登录admin'or1=1#,详情见上文(https://www.cnblogs.com/m1saka1/p/18411197)登录成功获得用户名和密码,发现密码并没有卵用,只能换思路利用账号密码的回显页面进行sql注入爆破数据库由于网站自动转义,为了方......