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

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

Rooted MST

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

요약
정점 0과 각 정점 i를 잇는 간선의 가중치를 질의마다 w로 바꾸고, 그때의 최소 스패닝 트리 가중치를 구하는 문제입니다.
난이도

어려움10점 중 9점

유형
최소 신장 트리, 분할 정복, 유니온 파인드
정답자
아직 제출이 없습니다

문제

정점이 0,1,…,n0, 1, \ldots, n으로 번호 매겨진 n+1n+1개의 정점과 n+mn + m개의 간선을 가진 단순 무방향 가중 그래프가 주어진다.

정점 00과 ii 사이 간선의 가중치는 1≤i≤n1 \leq i \leq n에 대해 aia_i이다.

정점 uiu_i와 viv_i 사이 간선의 가중치는 1≤i≤m1 \leq i \leq m에 대해 wiw_i이다.

qq개의 쿼리에 답해야 한다. 각 쿼리에서는 정수 i,wi, w가 주어지며, 정점 00과 ii 사이 간선의 가중치를 ww로 바꾼 뒤 그래프의 최소 스패닝 트리 가중치를 구한다. 가중치 변경은 영구적이어서 이후 쿼리에도 그대로 남는다.

입력

첫 줄에 정수 n,mn, m이 주어진다 (2≤n≤3000002 \leq n \leq 300000, 0≤m≤3000000 \leq m \leq 300000).

둘째 줄에 정수 a1,a2,…,ana_1, a_2, \ldots, a_n이 주어진다 (1≤ai≤1091 \leq a_i \leq 10^9).

이후 mm개의 줄에 정수 ui,vi,wiu_i, v_i, w_i가 한 줄씩 주어진다 (1≤ui,vi≤n1 \leq u_i, v_i \leq n, 0≤wi≤1090 \leq w_i \leq 10^9).

주어지는 그래프는 단순 그래프이며, 자기 루프와 다중 간선이 없음이 보장된다.

다음 줄에 정수 qq가 주어진다 (1≤q≤3000001 \leq q \leq 300000).

이후 qq개의 줄에 정수 i,wi, w가 한 줄씩 주어진다 (1≤i≤n1 \leq i \leq n, 1≤w≤1091 \leq w \leq 10^9).

출력

각 쿼리마다, 그 쿼리를 적용한 뒤의 최소 스패닝 트리 가중치를 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

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