QOJ.ac

QOJ

时间限制: 3 s 内存限制: 1024 MB 总分: 100

#5002. 距离与树

统计

图论问题在程序设计竞赛中非常流行,与距离和树相关的问题也经常出现。让我们从一些定义开始。

集合是不同元素的汇集。无向简单图 $G$ 是一个二元组 $(V, E)$,其中 $V$ 是一个集合,$E$ 是 $V$ 中元素组成的无序对集合。对于图 $G = (V, E)$,我们称 $V$ 为 $G$ 的顶点集,$E$ 为 $G$ 的边集。$V$ 中的元素是顶点,$E$ 中的元素是边。

设 $u$ 和 $v$ 为 $V$ 中的顶点。从 $u$ 到 $v$ 的长度为 $k$ 的路径是一个边序列 $e_1, e_2, \dots, e_k \in E$,使得存在一个由不同顶点组成的序列 $v_1, \dots, v_{k+1}$,满足以下条件:

  • $u = v_1$。
  • $v = v_{k+1}$。
  • $e_i = \{v_i, v_{i+1}\}$。

如果 $p$ 是从 $u$ 到 $v$ 的一条路径,则称 $u$ 和 $v$ 通过 $p$ 相连。

现在我们可以定义距离和树。给定两个顶点 $u, v \in V$,如果 $u = v$,则从 $u$ 到 $v$ 的距离 $\delta(u, v)$ 为 $0$。如果存在从 $u$ 到 $v$ 的路径,则 $\delta(u, v)$ 是形成从 $u$ 到 $v$ 的路径所需的最少边数。否则,$\delta(u, v) = \infty$。树是一种无向图,其中任意两个不同的顶点 $u$ 和 $v$ 之间恰好有一条路径相连。

Danny 给了你一个非负整数序列 $d_1, d_2, \dots, d_n$,并要求你构造一棵满足以下条件的树 $G_T = (V_T, E_T)$:

  • 顶点集 $V_T = \{p_1, \dots, p_n\}$ 是二维欧几里得平面上的一组点。对于 $1 \le k \le n$,$p_k$ 的坐标为 $(\cos k\theta, \sin k\theta)$,其中 $\theta = \frac{2\pi}{n}$。
  • 对于 $E_T$ 中的任意两条不同边 $\{p_a, p_b\}$ 和 $\{p_q, p_q\}$,线段 $p_a p_b$ 和 $p_q p_q$ 不相交,除非这两条边共享一个公共顶点(即 $\{p_a, p_b\} \cap \{p_q, p_q\} \neq \emptyset$)。
  • 存在一个顶点 $r$,使得对于 $1 \le k \le n$,$\delta(r, p_k) = d_k$。我们称 $r$ 为 $G_T$ 的根。

如果存在这样的树,请输出边集 $E_T$。否则,输出 -1。

输入格式

第一行包含一个正整数 $n$,表示要构造的树的顶点数。第二行包含 $n$ 个非负整数 $d_1, \dots, d_n$,即 Danny 给出的序列。

输出格式

如果不存在这样的树 $G_T$,输出 -1。否则,输出 $n - 1$ 行来表示边集 $E_T$。第 $i$ 行应包含两个空格分隔的整数 $u_i$ 和 $v_i$。$E_T$ 中的第 $i$ 条边应为 $\{p_{u_i}, p_{v_i}\}$。如果存在多种解,你可以输出其中任意一种。

数据范围

  • $2 \le n \le 100000$
  • 对于 $1 \le k \le n$,$0 \le d_k \le n - 1$

样例

样例输入 1

5
0 1 2 1 3

样例输出 1

-1

样例输入 2

5
1 1 0 1 1

样例输出 2

1 3
3 2
3 4
5 3

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.