当前位置: 首页 > news >正文

构造专题 #2

构造专题 #2

Problem A. UOJ460 新年的拯救计划

显然有上界 \(m=\lfloor\frac n 2 \rfloor\)

增量构造,每次让 \(n\) 增加 \(2\)。若 \(n\) 为奇数则每棵树随便向 \(n\) 连一条边即可。

首先令第 \(i\) 个原树的 \(2i-1\)\(n-1\) 连边,\(2i\)\(n\) 连边。然后加入一棵新树,\(n-1,n\) 之间连边,然后令 \(2i-1\)\(n\) 连边,\(2i\)\(n-1\) 连边。这样就达到了上界。

Problem B. CF1103C Johnny Solving

求出一棵 dfs 树,由于图是无向图,所以没有横叉边。

若存在一个 \(x\) 使得 \(dep_x\ge \frac n k\),则找到了一条路径。

否则,叶子数量一定 \(\ge k\)。由于每个节点的度数都 \(\ge 3\),所以对于叶子 \(x\),一定存在两条返祖边 \((x,y),(x,z)\)

然后就找出了三个环 \(x\rightarrow y\rightarrow x,x\rightarrow z \rightarrow x, x \rightarrow y \rightarrow z \rightarrow x\)。这三个环一定有一个满足条件。

也不难证明,输出的总数字不超过 \(10^6\)

Problem C. [ARC103F] Distance Sums

找到 \(D_x\) 最小的 \(x\),那么 \(x\) 一定是这棵树的重心。

从根向下,类似换根 dp,\(D_v=D_u+n-2siz_v\)。而 \(x\) 是重心,所以以 \(x\) 为根时所有节点的 \(2siz_x\le n\),于是向下转移时 \(D_v\) 只会上升。

移项得到 \(D_u=D_v-n+2siz_v\),于是只要知道 \(siz_v\) 就能找到它的父亲。而 \(D_v\) 最大的一定是叶子,所以按 \(D\) 从大到小考虑,每次找到父亲 \(u\) 后连边,更新 \(siz_u\)

由于这些只是必要条件,还要检查一下建出来的树是否满足 \(D\) 的限制。

Problem D. UOJ152【UR #10】汉诺塔

分治,将一号柱子上 \([mid+1,n]\) 扔到二号上,\([1,mid]\) 扔到三号上,递归下去,把二号和三号排成降序,然后归并到一号柱子上即可排成升序。递归下去后做类似的事,\(O(n\log n)\)

http://www.zskr.cn/news/21264.html

相关文章:

  • HarmonyOS 详细安装第三方库的流程与注意
  • Nginx proxy_pass 末尾斜杠(/) - 详解
  • 反射型XSS与自反型XSS深度解析
  • Qt下设置Linux系统时间
  • GitHub Spark引领Vibe编程与AI技术新趋势
  • 完整教程:从格伦的角度理解信息哲学
  • Voice Agent 开发者第一课:成为进阶语音 AI 玩家,你需要了解这些丨Convo AIRTE2025
  • C++内存管理的那些坑与经验
  • .NET 10 Release Candidate 2(RC2)发布
  • 字节开源 MineContext:截屏+理解上下文;OpenAI 宣布自研 AI 芯片丨日报
  • 云防护栏理论:应对云配置错误的安全防护策略
  • 乐理 -07 音程
  • VBA批量设置单元格值和数据有效性
  • 一个关于结构体性能和内存分配的问题
  • 网课三
  • 解决Pregenerating ConTeXt MarkIV format. This may take some time...卡死问题
  • 日期相关函数、方法
  • explain
  • FBAM 论文浅析
  • 软考二
  • MyBatis 延迟加载使用及原理 - Higurashi
  • 今日小雨
  • 2023 ICPC Jinan
  • Spring应用上下文的获取和保存Bean
  • Redis的数据类型选择
  • pipeline解决Redis频繁命令往返导致的性能瓶颈
  • 依赖冲突的发现和解决
  • day011
  • 算法模版
  • C#/.NET/.NET Core技术前沿周刊 | 第 57 期(2025年10.1-10.12)