페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#2118

데카르트(카테시안) 트리 1s 256MB

문제

이번에 소개 하는 트리는 이진 탐색트리 중에서 특이한 특성을 가지는 트리이다.

이진탐색트리의 경우 임의의 노드 x에 대해, 

x의 왼쪽 부트리(자신의 노드에 바로 달려 있는 하나의 자식 노드와 이에 달려 있는 모든 노드들의 집합)의 키 값은 x 의 키값보다 작으며, 

x의 오른쪽 부트리의 값은 x 의 키값보다 크다.

다시 말해서 L(x)를 노드 x의 왼쪽 부트리라고 하고, R(x)를 노드 x의 오른쪽 부트리라고 하고, k_x는 노드 x의 키값이라고 하면 다음과 같은 관계가 성립되어야 이진 탐색 트리라는 것이다.

  • 만약 노드 y L(x) 에 속해 있으면 k_y < k_x 여야 한다.

  • 만약 노드 zR(x) 에 속해 있으면 k_z > k_x 여야 한다.

이러한 이진 탐색 트리에서의 모든 노드 x가 기본키 k_x 를 가지고 이와 함께 보조키 a_x 를 가지고 있을 때 보조키 a_x 들이 다음과 같은 조건을 만족시키면 이를 데카르트 트리라고 한다.

  • yx 의 부모 노드일 경우 a_y < a_x 이다.

따라서 데카르트 트리는 각 노드 x에 대해가 2개의 키(k_x,\ a_x)의 쌍으로 이뤄지고, 위의 모든 조건을 만족 시키는 방향성과 순서적인 특징을 가진 트리라고 할 수 있다.

임의의 노드 x에 대한 (k_x,\ a_x)의 쌍이 여러 개 주어졌을 때, 이를 통해 데카르트 트리를 만들 수 있는지 없는지 판단하는 프로그램을 작성하라.


입력

입력의 첫 번째 줄에는 입력에서 주어질 2개의 키로 이뤄진 쌍의 개수 N이 입력된다 (1 \le N \le 50,000).

그 다음에 N개의 줄에는 (k, a)쌍 하나의 정보가 주어진다. 

앞의 값은 k (기본키)에, 뒤의 값은 a (보조키)에 대응 되는 키 값이며, 

두 값은 정수로 들어오며 -30,000 이상 30,000 이하의 값으로 주어진다. 

입력에 들어오는 기본키끼리 중복되는 수는 없으며, 

마찬가지로 입력에 들어오는 보조키 끼리 중복되는 숫자는 입력으로 들어오지 않는다.


출력

입력에 대해서 데카르트 트리를 만들 수 있을 경우 한 줄에 YES를 출력하며,

그렇지 못할 경우 NO를 출력한다. 

만약 가능할 경우, N개의 줄에 만들 수 있는 트리에 대한 출력을 한다.

각 줄에는 3개의 숫자가 출력 되는데, 이는 입력 받은 키에 대한 순서대로 출력한다.

첫 번째 숫자는 해당 위치에 놓여진 노드에 할당된 키 값이 할당된 노드의 부모의 고유 번호(입력받은 순서, 1부터 시작)를 뜻하며, 

그 다음의 두개의 숫자는 왼쪽 자식 노드와 오른쪽 자식 노드의 고유 번호를 뜻한다. 

만약 이러한 노드가 없을 경우 해당 숫자는 고유 번호 대신 0이 입력된다. 

입력에 대해서 만들어 질 수 있는 경우가 존재 할 경우의 형태는 무조건 1가지만 나온다고 가정한다. 


예제

7

5 4
2 2
3 9
0 5
1 3
6 6
4 11
YES

2 3 6
0 5 1
1 0 7
5 0 0
2 4 0
1 0 0
3 0 0

출처

Northeastern Europe 2002

로그인해야 코드를 작성할 수 있어요.