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

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

풀 바꿔 심기

시간 제한2초메모리 제한512 MB

요약
각 정점에 색이 있는 가중 연결 그래프에서, 정점 하나의 색을 바꾸는 갱신이 Q번 주어질 때마다 서로 다른 색을 가진 두 정점 사이 최단 거리를 구한다.
난이도

어려움10점 중 9점

유형
그래프, 최단 경로, 분할 정복, 동적 계획법
정답자
아직 제출이 없습니다

문제

농부 존은 농장에 여러 종류의 풀을 심어 보고 있다. 소마다 좋아하는 풀이 다르기 때문이다. 다만 종류가 다른 풀은 서로 충분히 멀리 떨어뜨려 심어야 한다. 가까이 심으면 풀이 섞여서 되돌릴 수 없다.

존의 농장은 NN개의 목초지로 이루어져 있고 (1≤N≤200 0001 \le N \le 200\,000), MM개의 목초지 쌍이 양방향 길로 이어져 있다 (1≤M≤200 0001 \le M \le 200\,000). 이 길만 이용해서 어느 목초지에서 어느 목초지로든 갈 수 있다. 각 길의 길이는 11 이상 1 000 0001\,000\,000 이하의 정수이고, 두 목초지를 직접 잇는 길은 많아야 하나다.

존은 각 목초지에 KK종류의 풀 중 하나를 심는다 (1≤K≤N1 \le K \le N). 시간이 지나면 어떤 목초지의 풀을 다른 종류로 바꾸기도 하는데, 이 작업을 갱신이라고 부른다. 갱신은 여러 번 일어나고, 그 효과는 모두 누적된다.

갱신을 한 번 할 때마다 존은 풀 종류가 서로 다른 두 목초지 사이의 최단 경로 길이를 알고 싶다. 즉 풀 종류가 다른 모든 목초지 쌍 중에서 가장 가까운 쌍의 거리이다. 이 값이 클수록 한 종류의 풀이 다른 종류와 섞일 걱정이 줄어든다. 어떤 갱신을 적용한 뒤에도 농장에는 풀 종류가 서로 다른 목초지가 항상 두 개 이상 있다.

입력의 30%에서는 각 목초지에 직접 연결된 길이 10개 이하이다.

입력

첫째 줄에 네 정수 NN, MM, KK, QQ가 주어진다. QQ는 갱신의 개수이다 (1≤Q≤200 0001 \le Q \le 200\,000).

다음 MM개의 줄에는 길의 정보가 한 줄에 하나씩 주어진다. 각 줄은 세 정수 AA, BB, LL로 이루어지며, 목초지 AA와 목초지 BB를 잇는 길이 LL인 길이 있다는 뜻이다 (1≤A,B≤N1 \le A, B \le N, 1≤L≤1 000 0001 \le L \le 1\,000\,000).

다음 줄에는 각 목초지에 처음 심은 풀의 종류가 목초지 11번부터 NN번까지 순서대로 NN개의 정수로 주어진다. 각 값은 11 이상 KK 이하이다.

마지막 QQ개의 줄에는 갱신이 한 줄에 하나씩 두 정수 AA, BB로 주어진다. 목초지 AA의 풀을 종류 BB로 바꾼다는 뜻이다 (1≤A≤N1 \le A \le N, 1≤B≤K1 \le B \le K).

출력

각 갱신마다 그 갱신을 적용한 뒤 풀 종류가 서로 다른 두 목초지 사이의 최단 경로 길이를 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

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