만드는 중입니다

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

최소 스패닝 트리와 쿼리

시간 제한5초메모리 제한256 MB

요약
가중치가 있는 방향 그래프 G가 주어질 때, 각 i에 대해 G와 Path_i의 텐서 곱에서 최소 신장 트리의 가중치를 구합니다.
난이도

어려움10점 중 9점

유형
최소 신장 트리, 그래프, 유니온 파인드, 동적 계획법
정답자
아직 제출이 없습니다

문제

PathiPath_i는 정점이 ii개인 방향 그래프이다. 모든 1≤j<i1 \le j < i에 대해 j→j+1j \rightarrow j + 1 방향의 간선이 있다.

가중치가 있는 방향 그래프 G1G_1과 방향 그래프 G2G_2의 텐서 곱 G1×G2G_1 \times G_2는 다음과 같이 정의한다.

  • 정점 집합은 {(u,v)∣u∈G1,v∈G2}\{(u, v) \mid u \in G_1, v \in G_2\}이다. 정점의 개수는 ∣G1∣×∣G2∣|G_1| \times |G_2|이다.
  • 두 정점 (u1,v1)(u_1, v_1)과 (u2,v2)(u_2, v_2)는 G1G_1에 u1→u2u_1 \rightarrow u_2 간선이 있고 G2G_2에 v1→v2v_1 \rightarrow v_2 간선이 있으면 무방향 간선으로 이어진다.
  • 이 간선의 가중치는 G1G_1에서 u1→u2u_1 \rightarrow u_2 간선의 가중치와 같다.

NN개의 정점과 MM개의 간선을 가진 방향 그래프 GG가 입력으로 주어진다. 각 간선에는 양의 정수 가중치가 있다. G×PathiG \times Path_i는 무방향 그래프이며, 각 간선에도 양의 정수 가중치가 있다. 모든 2≤i≤Q+12 \le i \le Q + 1에 대해 G×PathiG \times Path_i의 최소 스패닝 트리 간선 가중치 합을 구하라. 쿼리로 주어지는 모든 G×PathiG \times Path_i에는 스패닝 트리가 항상 존재함이 보장된다.

입력

첫 번째 줄에 세 정수 NN, QQ, MM이 주어진다. (1≤N,Q≤1000001 \le N, Q \le 100000, 1≤M≤2000001 \le M \le 200000)

이후 MM개의 줄에 세 정수 uiu_i, viv_i, wiw_i가 주어진다. 이는 ui→viu_i \rightarrow v_i 방향으로 가중치 wiw_i인 간선이 있다는 뜻이다. (1≤ui,vi≤N1 \le u_i, v_i \le N, 1≤wi≤301 \le w_i \le 30)

출력

QQ개의 줄을 출력한다. ii번째 줄에는 G×Pathi+1G \times Path_{i+1}의 답을 출력한다.

예제3

  1. 예제 1

    입력
    4 4 8
    3 4 1
    1 1 3
    1 3 2
    4 2 4
    4 4 2
    2 2 3
    1 2 2
    1 4 3
    
    예상 출력
    16
    23
    30
    37
    
  2. 예제 2

    입력
    4 4 8
    3 4 12
    1 1 20
    1 3 22
    4 2 12
    4 4 2
    2 2 2
    1 2 2
    1 4 2
    
    예상 출력
    62
    80
    98
    116
    
  3. 예제 3

    입력
    6 6 15
    1 2 1
    1 3 1
    3 4 1
    2 4 1
    6 3 2
    6 5 2
    3 5 2
    2 3 2
    4 3 2
    6 4 2
    5 4 2
    4 6 2
    6 6 2
    5 5 3
    5 1 3
    
    예상 출력
    19
    28
    37
    46
    55
    64