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

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

최소 신장 선인장

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

요약
가중치가 있는 선인장 그래프가 주어질 때 최소 비용 신장 선인장을 출력하고, 각 간선 가중치 갱신 질의마다 갱신된 최소 비용을 출력한다.
난이도

어려움10점 중 8점

유형
그래프, 트리, 동적 계획법, 세그먼트 트리
정답자
아직 제출이 없습니다

문제

[그림] 선인장 그래프의 예시

선인장 그래프(cactus graph)는 모든 간선이 최대 한 개의 사이클에 속하는 연결된 무방향 그래프다. 즉, 서로 다른 두 사이클이 최대 한 개의 공통 정점을 가지는 무방향 연결 그래프다.

신장 부분 그래프(spanning subgraph)는 기존 그래프의 모든 정점을 포함하는 부분 그래프(subgraph)다. 신장 부분 그래프가 선인장 그래프이면 이를 신장 선인장(spanning cactus)이라고 한다. 그래프의 간선에 비용이 주어질 때, 간선 비용의 합이 최소인 신장 선인장을 최소 신장 선인장(minimum spanning cactus)이라고 한다.

정점 NN개, 비용이 있는 무방향 간선 MM개로 이루어진 선인장 그래프가 주어진다. 모든 정점에는 11부터 NN까지 번호가 붙어 있다. 먼저 주어진 선인장 그래프의 최소 신장 선인장의 비용을 출력하고, 다음 쿼리를 수행하는 프로그램을 작성해 보자.

  • uu vv dd : 정점 uu와 정점 vv를 잇는 간선의 비용을 dd로 바꾸고, 최소 신장 선인장의 비용을 출력한다.

입력

첫 번째 줄에 정점의 개수 NN, 간선의 개수 MM, 쿼리의 개수 QQ가 주어진다. (2≤N≤100 0002 \le N \le 100\,000, N−1≤M≤150 000N-1 \le M \le 150\,000, 1≤Q≤100 0001 \le Q \le 100\,000)

두 번째 줄부터 MM개의 줄에 걸쳐서 간선을 나타내는 (x,y,c)(x,y,c)가 순서대로 주어진다. xx와 yy는 간선의 양 끝 정점이고, cc는 간선의 가중치다. 두 정점 사이에 두 개 이상의 간선이 있는 경우는 주어지지 않는다. (1≤x,y≤N1 \le x, y \le N, −109≤c≤109-10^9 \le c \le 10^9)

다음 QQ개의 줄에는 쿼리가 한 줄에 하나씩 주어진다.

출력

첫 번째 줄에는 처음에 주어진 선인장 그래프의 최소 신장 선인장의 비용을 출력한다.

두 번째 줄부터 QQ개의 줄에 걸쳐서 쿼리의 결과를 출력한다.

예제1

  1. 예제 1

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