2024.01.21 practice
Tree Calendar
树形日历
\(2.00\text{s}\)
\(500.00\text{MB}\)
题面翻译
你有一个 \(n(2 \le n \le 3 \times 10^5)\) 个节点,以 \(1\) 为根的树和它的某一个 DFS 序(但你不知道具体是什么)。又有一个序列 \(a\),初始时 \(a_i\) 就是第 \(i\) 个点在 DFS 序中的位置。
某人对这个树进行了若干次操作,每次操作形如找到一个字典序最小的二元组 \((a_i,a_j)\)(\(需满足 a_i < a_j\)),使得 \(i\) 是 \(j\) 树上的父亲 ,并且交换 \(a_i,a_j\)。
现在给定你这棵树和操作若干次后的序列 \(a'\),要求你判断是否存在一种 DFS 序使得进行若干次操作后的 \(a\) 序列是给定的 \(a'\)。有解还需输出操作次数和初始的 \(a\) 序列(如有多解输出任意一解即可)。
题目描述
Yuu Koito 和 Touko Nanami 是新婚夫妻!在婚礼当天,Yuu 赠送给 Touko 一个有 $ n $ 个节点的有向树,并以 $ 1 $ 为根节点,同时给出了一个标记 $ a $,这是树的某种深度优先搜索(DFS)顺序。树中的每条边都是指向外的,即指向子节点。
在调用 dfs(1) 后,以下算法将返回 $ a $ 作为以 $ 1 $ 为根节点的树的 DFS 顺序:
order := 0
a := 长度为 n 的数组
function dfs(u):
order := order + 1
a[u] := order
for all v such that there is a directed edge (u -> v):
dfs(v)
请注意,对于给定的树,可能会有不同的 DFS 顺序。
Touko 非常喜欢这份礼物,因此决定好好玩一玩!在婚礼的每个后续日子里,Touko 每天都会执行如下程序一次:
- 在所有满足 $ a_u < a_v $ 的有向边 $ u \rightarrow v $ 中,选择具有字典序最小的对 \((a_{u'}, a_{v'})\) 的边 $ u' \rightarrow v' $ 。
- 交换 $ a_{u'} $ 和 $ a_{v'} $ 。
自婚礼以来已经过去了一段时间,Touko 不知怎么的忘记了婚礼的日期以及最初的标记 $ a $!她担心 Yuu 会生气,因此决定请你帮忙推导出这两个信息,即经过的天数和原始标记。
作为她的好朋友,你需要找出自婚礼以来过去的天数,以及树的原始标记。然而,Touko 可能在操作过程中出错,导致当前标记无法从某个原始标记得到;在这种情况下,请告诉 Touko。
输入格式
输入的第一行包含一个整数 $ n $ ( $ 2 \le n \le 3 \cdot 10^5 $ ) - 树中节点的数量。
第二行包含 $ n $ 个整数 $ a_1 $, $ a_2 $, ..., $ a_n $ ( $ 1 \le a_i \le n $ , 所有 $ a_i $ 皆不同) - 当前树的标记。
接下来的 $ n - 1 $ 行每行包含两个整数 $ u_i $ 和 $ v_i $ ( $ 1 \le u, v \le n $ , $ u \neq v $ ),描述从 $ u_i $ 到 $ v_i $ 的有向边。这些边构成以 $ 1 $ 为根的有向树。
输出格式
如果当前标记无法通过任何 DFS 顺序得到,请输出 NO。
否则,在第一行输出 YES。第二行输出一个整数,表示自婚礼以来过去的天数。第三行输出 $ n $ 个用空格分隔的数字,表示树的原始标记。
如果有多个正确的输出,请打印任意一种。这意味着:你可以输出任何一对(DFS 顺序,天数),使得我们从你提供的 DFS 顺序经过正好你提供的天数得到了当前的配置。
样例 #1
样例输入 #1
7
4 5 2 1 7 6 3
1 5
7 6
1 2
2 7
3 4
1 3
样例输出 #1
YES
5
1 4 2 3 7 6 5
样例 #2
样例输入 #2
7
7 6 5 3 1 4 2
4 3
2 5
3 7
1 4
7 2
2 6
样例输出 #2
NO
提示
以下动画展示了第一个样例测试用例。节点内的白色标签代表节点的索引 $ i $,而盒装的橙色标签则表示值 $ a_i $。
[ARC167E] One Square in a Triangle
三角形中的一个正方形
\(2.00\text{s}\)
\(1.00\text{GB}\)
题面翻译
多组测试,每次给定一个 \(S\) ,你需要构造一个三角形满足以下条件。
- 该三角形的三个顶点都为格点
- 该三角形的面积为 \(\frac{S}{2}\)
- 该三角形内恰好只包含一个边长为1的正方形且该正方形的顶点也为格点(正方形的边可以和三角形的边或顶点重合)
——translated by @Tokai__Teio (如果翻译有误请即时@管理更改/kel)
题目描述
将满足以下所有条件的 \(xy\) 平面上的三角形 \(ABC\) 称为良好三角形。
- 顶点 \(A, B, C\) 均为坐标 \(x\) 和 \(y\) 都在 \(0\) 到 \(10^{8}\) 之间的格点。
- 所有顶点都为格点的面积为 \(1\) 的正方形中,完全包含在三角形 \(ABC\) 内部(包括边界和顶点)的正方形恰好有 \(1\) 个。
给定一个正整数 \(S\)。
判断是否存在面积为 \(\frac{S}{2}\) 的良好三角形,如果存在,请构建一个。
每个输入文件中包含 \(T\) 个测试用例,请分别解决每个用例。
输入格式
输入以以下格式通过标准输入给出。
\(T\) \(\text{case}_{1}\) \(\text{case}_{2}\) \(\vdots\) \(\text{case}_{T}\)
每个案例以以下格式给出。
\(S\)
输出格式
对于每个案例,如果面积为 \(\frac{S}{2}\) 的良好三角形不存在,则输出 No;如果存在,则以以下格式输出答案。
Yes \(AX\) \(AY\) \(BX\) \(BY\) \(CX\) \(CY\)
其中,\(AX, BX, CX\) 分别为 \(A, B, C\) 的 \(x\) 坐标,\(AY, BY, CY\) 分别为 \(A, B, C\) 的 \(y\) 坐标。
输出 Yes 和 No 时,各个字母可以是大写或小写。存在多个解时输出任意一个都视为正确。
样例 #1
样例输入 #1
3
1
4
15
样例输出 #1
No
Yes
1 1 1 3 3 3
Yes
5 1 7 8 4 5
提示
约束
- \(1 \leq T \leq 10^{5}\)
- \(1 \leq S \leq 10^{8}\)
- 所有输入均为整数
示例解释 1

图左侧的三角形对应第二个测试用例,右侧的三角形对应第三个测试用例。

浙公网安备 33010602011771号