首页 > 其他分享 >【题解】CF2031

【题解】CF2031

时间:2024-11-24 09:14:08浏览次数:6  
标签:pq 查集 题解 CF2031 tag 注意 答案 考虑

A

  • tag:签到题
  • 注意到定住一个值后,左边的值全都得改,右边的值也全都得改
  • 注意到,定住的越多,需要改的就越少
  • 所以开桶记一下哪个值最多就行

B

  • tag:诈骗诈骗签到题
  • 读完题容易产生 naive 结论:当且仅当错位的两个地方相邻可以修复,其余情况全部无法修复
  • 感觉真不了一点,于是找三个数 ABC 来手模一下
  • 发现这个结论好像是真的,交一发
  • 过了,那就真了吧

C

  • tag:究极神迷构造题
  • 注意到如果是偶数直接 11 22 33 44 55 66 就好了
  • 接下来讨论奇数
  • 注意如果是奇数,必然至少存在一个数出现了奇数次
  • 所以必然存在三个点 \(A,B,C\) 使得 \(|AB|^2+|BC|^2=|AC|^2\)
  • 注意到最小的满足 \(a^2+b^2=c^2\) 的正整数三元组是 \((3,4,5)\)
  • 考虑如何构造:
    • 1 10 26 放一个数
    • 23 27 放一个数
    • 24 25 放一个数
    • 其余地方两两一组放即可
  • 显然小于 27 的奇数无解

D

  • tag:好题

Sol 1 并查集

  • 首先注意到正着跳和反着跳是互逆的,所以我们可以看成只有正或只有反,然后连无向边
  • 考虑并查集
  • 显然,对于每个 \(i\) 都需要向它前面的比它高的点连边,时间复杂度 \(O(n^2)\),不可接受
  • 考虑优化
  • 用一个 pq 维护 \(i\) 之前比 \(i\) 还高的点,键是高度,连一个 pop 一个,并查集同时维护最高高度,离开 \(i\) 时将 \(i\) 和 \(i\) 能到达的最高高度压入 pq 即可
  • 显然对于每个 \(i\),最多进出 pq 一次,所以复杂度 \(O(n\log n)\)

Sol 2 Clever 做法

  • 注意到从一个点开始可能先往后再往前,顺序处理比较麻烦。
  • 我们考虑最开始可以较为简单求出答案的点,容易发现 \(a_i\) 最大的点往后的点肯定跳到这个点上。
  • 于是每次求出答案未确定的点中 \(a_i\) 最大的点。如果它能跳到 \(j\) 且 \(j\) 的答案已求出,答案 \(ans_i=ans_j\) (我们是从大往小枚举,先求出的答案肯定大)。 再让它后面所有没求出答案的 \(j\) 答案为 \(ans_i\) 。
  • 非常优美,时间复杂度 \(O(n)\)

E

  • tag:好题
  • 根据直觉考虑树形 dp
  • \(f_{u}\) 表示子树 \(u\) 可满足同构所需最小完美二叉树深度
  • 考虑转移:
    • 考虑没有儿子:由于这道题的深度是 0-index,直接返回即可
    • 考虑只有一个儿子:\(f_{u}=f_{v}+1\)
    • 考虑有两个儿子:\(f_{u}=\max(f_{v})+1\)
    • 考虑有好多好多儿子:显然必须逐个合并,考虑合并顺序
      • 显然先合小的更优,于是每个点开 pq 即可
  • 答案即为 \(f_{1}\)

标签:pq,查集,题解,CF2031,tag,注意,答案,考虑
From: https://www.cnblogs.com/yeyou26/p/18564988

相关文章

  • 读数据质量管理:数据可靠性与数据质量问题解决之道13数据沿袭
    1. 数据沿袭1.1. MyDoom的病毒1.2. 现在,许多团队甚至整个公司都在使用数据,这要求数据管理的方式要更便于合作,同时也更不容许发生错误1.3. 从采用dbt和ApacheAirflow等开源工具来实现数据转换和编排,到使用Snowflake和Databricks等云端数据仓库和数据湖1.4. 数据仪表板和......
  • ybtoj 高效进阶题解索引
    密码:sunxuhetai2009--------------------云落的分割线--------------------基础算法第1章-递推算法第2章-贪心算法第3章-二分算法第4章-深搜算法第5章-广搜算法已完结--------------------云落的分割线--------------------图论第1章-并查集第4章-强连......
  • 攻防世界 web(新手模式)题解
    1.view_source题目描述:X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了。根据题目提示直接F12查看源代码,发现答案就在源代码里2.get_post题目描述:X老师告诉小宁同学HTTP通常使用两种请求方法,你知道是哪两种吗?根据提示,我们需要用GET方式提......
  • 题解:AT_abc381_c [ABC381C] 11/22 Substring
    显然这个“11/22Substring”是以那个“/”为中心对称的。鉴于一个这样的字符串只能有一个“/”,而题目又要求最长,所以确定了“/”就能确定一个满足要求的子串。那思路就很简单了,只有两步:找到所有的“/”两边同时寻找相应的子串。别的,除了判断一下越界之外,就不用管了。......
  • [题解](更新中)[test06]2024/11/23 模拟赛 / 2023牛客OI赛前集训营-提高组(第三场) A~C
    原题页面:https://ac.nowcoder.com/acm/contest/65194Statements&Solution:https://www.luogu.com.cn/problem/U507978\(80+80+50+24=234\)。A贪心+双指针。根据贪心思想,大值选大、小值选小。我们按绝对值从大到小给\(a\)排序,再按从小到大给\(b\)排序,取双指针\(l=1,r=m\)......
  • 题解 - Birds
    题目题目大意一条直线上有\(n\)棵树,第\(i\)棵树上有\(c_i\)​只鸟。在第\(i\)棵树下召唤一只鸟的魔力代价是\(cost_i\)​。每召唤一只鸟,魔力上限会增加\(B\)。每向前走一棵树,会增加\(X\)的魔力。一开始的魔力和魔力上限都是\(W\)。你只能向前移动。问最多能够召......
  • 题解:CF1970E1 Trails (Easy)
    基本思路设\(dp_{i,j}\)为第\(i\)天时在第\(j\)个小屋的方案数,\(r_j\)为第\(j\)个小屋共有多少条路连接(即\(s_j+l_j\))。易得转移方程为\[dp_{i,j}=\sum_{k=1}^{m}dp_{i-1,k}\cdot(r_j\cdotr_k-l_j\cdotl_k)\](因为至少走一条短路,所以减去全长路的情况)代码实现......
  • 题解:CF644B Processing Queries
    CF644BProcessingQueries基本思路模拟题。对于每个工作申请,队列有如下两种操作:首先,将\(\leq\)当前开始时间(即\(t_i\))的所有操作弹出。接下来有两种选择:当队列已满,直接输出-1。当队列未满,更新结束时间并入队,输出新结束时间。代码实现#include<bits/stdc++.h>......
  • 题解:UVA13185 DPA Numbers I
    UVA13185DPANumbersI基本思路对于每个\(n\),枚举\(n\)的因数,最后判断因数大小即可。直接枚举到\(n-1\)有点浪费,所以可以只枚举到\(\sqrt{n}\),加上因数与\(n\)除以此因数的商。注意:最后要减去\(n\),且\(n\)为完全平方数时要减去一个\(\sqrt{n}\)。代码实现#incl......
  • 题解:SP1442 CHAIN - Strange Food Chain
    有三种可能的假话:编号\(>n\);自己吃自己;互吃。使用扩展域并查集(种类并查集)。code:#include<bits/stdc++.h>usingnamespacestd;intn,m,c,t,F[150005];intfind(intx){ if(F[x]==x)returnx; returnF[x]=find(F[x]);}intmain(){cin>>t;while......