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\) 坐标。

输出 YesNo 时,各个字母可以是大写或小写。存在多个解时输出任意一个都视为正确。

样例 #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

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

posted @ 2025-01-21 09:44  zhiyin123123  阅读(12)  评论(0)    收藏  举报
目录侧边栏

qwq