Apollonian Embedding

시간 제한1초메모리 제한1024 MB

요약
삼각분할된 볼록 N각형이 주어질 때, 한 삼각형에서 시작해 정점을 하나씩 추가하여 주어진 그래프의 변을 모두 포함하는 Apollonian network를 구성해 출력한다.
난이도

어려움10점 중 8점

유형
그래프, 분할 정복, 재귀, 기하
정답자
아직 제출이 없습니다

문제

볼록 NN각형이 주어진다. 각 정점들의 번호는 시계방향으로 1,2,⋯ ,N1,2,\cdots ,N이다. ii번 정점과 i+1i+1번 정점 사이에는 양방향 간선이 존재한다 (N+1N+1번 정점은 11번 정점으로 간주한다). 여기에 서로 교차하지 않는 N−3N-3개 간선이 새로 주어진다. Apollonian network는 삼각형 그래프에서 시작해 재귀적으로 하나의 삼각형을 작은 3개의 삼각형으로 분할하는 것을 반복해서 만들 수 있는 그래프이다. 자세히는 다음과 같이 생성된다. 처음에는 정점 3개, 간선 3개로 이루어진 그래프로 시작한다. 이때 삼각형 면은 시작 정점 3개로 이루어진 삼각형 1개 뿐이다. 다음 시행을 00회 이상 반복해서 만들 수 있는 그래프를 Apollonian network라고 부른다.

  • 정점 u,v,wu,v,w로 구성된 삼각형 면을 고른다.
  • 새로운 정점 xx를 추가한다.
  • 새로운 간선 xuxu, xvxv, xwxw를 추가한다.
  • 삼각형 면 uvwuvw를 제거하고 새로운 삼각형 면 3개 xuvxuv, xvwxvw, xwuxwu를 추가한다.

주어진 그래프를 부분 그래프로 가지며 정점이 NN개인 Apollonian network를 만들어야 한다. 가능한 방법이 여러 가지라면 아무것이나 출력해도 된다.

입력

첫 번째 줄에는 NN이 주어진다. (3≤N≤30003 \leq N \leq 3000)

이어지는 N−3N-3개의 줄에는 대각선을 이루는 정점을 나타내는 두 정수 uu, vv가 주어진다. (1≤u<v≤N1 \leq u < v \leq N)

출력

Apollonian network를 위의 생성 과정을 따라서 생성한다.

첫 번째 줄에 Apollonian network의 시작 삼각형을 이루는 세 정점을 공백을 사이에 두고 출력한다.

다음 N−3N-3개의 줄에는 제거하는 삼각형 면을 이루는 정점 3개 uu, vv, ww와 추가하는 정점 xx를 공백을 사이에 두고 출력한다. 각 줄에서 u,v,wu, v, w의 출력 순서는 상관이 없다. 정점이 NN개인 Apollonian network를 만들기 위해서는 시행을 N−3N-3번 해야 됨을 알 수 있다.

예제3

  1. 예제 1

    입력
    3
    
    예상 출력
    2 1 3
    
  2. 예제 2

    입력
    4
    2 4
    
    예상 출력
    2 1 4
    4 2 1 3
    
  3. 예제 3

    입력
    5
    1 3
    3 5
    
    예상 출력
    2 1 3
    1 3 2 5
    5 3 2 4