아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

프라이마르팩토르

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

요약
각 노드에 높이가 있는 그래프에서, 더 높은 노드에 도달하기 위해 내려가야 하는 최소 높이 차를 구하고, 도달할 수 없으면 자기 높이를 출력한다.
난이도

보통10점 중 7점

유형
그래프, 그리디, 유니온 파인드, 정렬
정답자
아직 제출이 없습니다

문제

"세계에서 가장 높은 산은? 에베레스트산 정상의 가장 높은 지점. 좋아, 그럼 세계에서 두 번째로 높은 산은? 당연히 에베레스트산 정상의 두 번째로 높은 지점이지."

이 논리대로면 세계에서 가장 높은 산 목록은 아주 우스워진다. 하지만 해결책이 있는데, 바로 프라이마르팩토르(primary factor)라는 개념을 도입하는 것이다. 산의 프라이마르팩토르는 그 산에서 더 높은 산에 도달하기 위해 내려가야 하는 최소 높이 차이다. 이는 산이 얼마나 독립적인지를 나타내는 일종의 척도로 작동하며, 프라이마르팩토르가 200 m 미만인 지점을 모두 제거하면 실제로는 더 높은 산에 붙어 있는 우스운 작은 산들을 없앨 수 있다. 이 문제는 그래프에서 모든 프라이마르팩토르를 찾는 것에 관한 것이다.

nn개의 노드와 mm개의 간선을 가진 그래프가 있고, 각 노드 ii에는 음이 아닌 정수 h(i)h(i)가 주어지며 이를 노드의 높이라고 한다. 노드의 프라이마르팩토르 P(i)P(i)는 노드에서 엄격히 더 높은 높이를 가진 노드에 도달하기 위해 내려가야 하는 최소 높이이다. 좀 더 수학적인 정의는 다음과 같다. G(i)G(i)를 노드 ii에서 h(j)>h(i)h(j) > h(i)인 다른 노드 jj로 가는 모든 경로의 집합이라고 하자. ii의 프라이마르팩토르는 다음과 같이 정의된다.

P(i)=min⁡γ∈G(i){h(i)−min⁡k∈γ(h(k))}P(i) = \min_{\gamma \in G(i)} \left\{ h(i) - \min_{k\in \gamma}(h(k)) \right\}

G(i)=∅G(i) = \emptyset인 경우, 즉 더 높은 높이를 가진 노드로 아예 갈 수 없는 경우에는 프라이마르팩토르를 h(i)h(i)라고 한다.

그래프가 주어졌을 때, 모든 노드의 프라이마르팩토르를 구하여라.

입력

첫째 줄에 두 정수 nn과 mm이 주어진다. 둘째 줄에 nn개의 정수 0≤h(i)≤1090 \leq h(i) \leq 10^9가 주어지며, 이는 노드의 높이이다. 그다음 mm개의 줄에 두 정수 aa와 bb (1≤a,b≤n1 \leq a,b \leq n)가 주어지며, 이는 노드 aa와 bb 사이에 간선이 있음을 뜻한다.

출력

한 줄에 nn개의 정수를 출력한다. 이는 노드의 프라이마르팩토르이다.

제한

  • n≤100 000n \le 100\,000
  • m≤400 000m \le 400\,000

예제2

  1. 예제 1

    입력
    5 4
    3 2 5 1 6
    1 2
    2 3
    3 4
    4 5
    
    예상 출력
    1 0 4 0 6 
    
  2. 예제 2

    입력
    6 7
    1 2 3 4 5 6
    1 2
    1 3
    1 6
    2 3
    2 4
    2 5
    3 4
    
    예상 출력
    0 0 0 2 4 6