만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

트리 임베딩

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

요약
가중치가 있는 트리가 주어질 때, 각 정점에 최대 16차원의 정수 벡터를 배정하여 두 벡터의 좌표 차이 최댓값이 두 정점 사이의 트리 거리와 같도록 합니다.
난이도

어려움10점 중 9점

유형
트리, 분할 정복, 수학
정답자
아직 제출이 없습니다

문제

bobo는 정점이 nn개인 트리를 가지고 있다. bobo는 각 정점 vv에 mm차원 벡터 p(v)\mathbf{p}(v)를 할당하고자 한다. 이때 모든 정점 aa, bb에 대해 dist(a,b)=⟨p(a),p(b)⟩\mathrm{dist}(a, b) = \langle \mathbf{p}(a), \mathbf{p}(b) \rangle가 성립해야 한다.

dist(a,b)\mathrm{dist}(a, b)는 정점 aa와 bb 사이 최단 경로의 길이이다. 두 벡터 u=(u1,…,um)\mathbf{u} = (u_1, \dots, u_m), v=(v1,…,vm)\mathbf{v} = (v_1, \dots, v_m)의 내적은 다음과 같이 정의한다.

⟨u,v⟩=max⁡{∣u1−v1∣,∣u2−v2∣,…,∣um−vm∣}.\langle \mathbf{u}, \mathbf{v} \rangle = \max\{|u_1 - v_1|, |u_2 - v_2|, \dots, |u_m - v_m|\}.

입력

첫 줄에 정수 nn이 주어진다 (2≤n≤10002 \leq n \leq 1000).

정점은 편의상 1,2,…,n1, 2, \dots, n으로 번호가 매겨져 있다.

이후 n−1n - 1개의 줄에 정수 aia_i, bib_i, cic_i가 주어진다. 이는 정점 aia_i와 bib_i를 잇는 길이 cic_i의 간선을 뜻한다 (1≤ai,bi≤n1 \leq a_i, b_i \leq n, 1≤ci≤1000001 \leq c_i \leq 100000).

출력

첫 줄에 벡터의 차원 mm을 출력한다 (1≤m≤161 \leq m \leq 16).

이후 nn개의 줄에 각각 mm개의 정수로 이루어진 벡터 p(i)\mathbf{p}(i)를 출력한다. 각 좌표는 [−109,109][-10^9, 10^9] 범위에 있어야 한다.

올바른 답이라면 어떤 해도 허용된다.

예제2

  1. 예제 1

    입력
    2
    1 2 2
    
    예상 출력
    1
    0
    -2
    
  2. 예제 2

    입력
    4
    1 2 1
    1 3 1
    1 4 1
    
    예상 출력
    2
    0 0
    -1 -1
    -1 1
    1 1