CSES - Prüfer Code | Mã Prüfer

Xem PDF



Tác giả:
Dạng bài
Điểm: 1600 (p) Thời gian: 1.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Mã Prüfer của một cây gồm \(n\) đỉnh là một dãy gồm \(n-2\) số nguyên chỉ xác định duy nhất một cấu trúc của cây.

Đoạn mã được hình thành như sau: Khi vẫn còn ít nhất ba đỉnh trên cây, tìm đỉnh lá có chỉ số nhỏ nhất, thêm chỉ số của đỉnh kề duy nhất của nó vào đoạn mã, và bỏ đỉnh lá đó ra khỏi cây.

Cho một mã Prüfer của một cây, nhiệm vụ của bạn là xây dựng lại cây ban đầu.

Input

  • Dòng đầu tiên chứa một số nguyên \(n\) là số lượng đỉnh của cây. Các đỉnh được đánh số từ \(1\) đến \(n\).
  • Dòng thứ hai chứa \(n-2\) số nguyên là mã Prüfer.

Output

  • In ra \(n-1\) dòng mô tả các cạnh của cây. Mỗi dòng chứa hai số nguyên \(a\)\(b\) có ý nghĩa là có một cạnh nối giữa hai đỉnh \(a\)\(b\). Bạn có thể in các cạnh theo thứ tự bất kỳ.

Constraints

  • \(3 \le n \le 2 \times 10^5\)
  • \(1 \le a, b \le n\)

Example

Sample input

5
2 2 4

Sample output

1 2
2 3
2 4
4 5


Bình luận


  • 0
    nguyen_ducminh    1:01 a.m. 31 Tháng 8, 2023 chỉnh sửa 2

    CSES - Prüfer Code | Mã Prüfer

    Mã Prüfer của một cây \(n\) đỉnh là một dãy gồm \(n-2\) số nguyên xác định duy nhất một cấu trúc của cây.

    Mã được xây dựng như sau: Trong khi cây còn ít nhất ba đỉnh, tìm một đỉnh lá với chỉ số nhỏ nhất, thêm chỉ số của đỉnh kề duy nhất của nó vào mã, và loại bỏ đỉnh lá đó khỏi cây.

    Bạn được cho mã Prüfer của một cây, nhiệm vụ của bạn là xây dựng cây ban đầu.

    Input

    • Dòng đầu tiên gồm một số nguyên \(n\) (\(3 \leq n \leq 2\times10^5\)) - số lượng đỉnh của cây. Các đỉnh được đánh chỉ số \(1,2,...,n\).
    • Dòng thứ hai gồm \(n-2\) số nguyên - mã Prüfer của cây.

    Output

    • Gồm \(n-1\) dòng mô tả các cạnh của cây. Mỗi dòng gồm hai số nguyên \(a\)\(b\) (\(1 \leq a,b \leq n\)) với ý nghĩa có cạnh nối giữa hai đỉnh \(a\)\(b\). Bạn có thể in các cạnh theo thứ tự bất kì.

    Example

    Input
    5
    2 2 4
    Output
    1 2
    2 3
    2 4
    4 5