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

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

간단한 트리 문제

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

요약
정점과 간선의 가중치가 갱신되는 트리에서 모든 경로에 대해 (정점 가중치 합) 곱하기 (간선 가중치 합)을 더한 값을 각 갱신마다 구한다.
난이도

어려움10점 중 9점

유형
트리, DFS, 세그먼트 트리, 조합론
정답자
아직 제출이 없습니다

문제

NN개의 정점과 N−1N-1개의 간선으로 이루어진 트리가 있다. 각 정점에는 11번부터 NN번까지, 각 간선에는 11번부터 N−1N-1번까지 번호가 붙어 있으며 모든 정점과 간선에는 가중치가 부여되어 있다. 다음 쿼리를 처리하는 프로그램을 작성하시오.

  • 11 ii xx : ii번 정점의 가중치를 xx로 변경한다.
  • 22 ii xx : ii번 간선의 가중치를 xx로 변경한다.

최초 트리 상태와 각 변경 쿼리마다 모든 N(N−1)/2N(N-1)/2개의 서로 다른 경로에 대하여 (경로 위 정점 가중치의 합)×\times(경로 위 간선 가중치의 합)의 합을 109+710^9+7로 나눈 나머지를 출력하시오.

입력

첫째 줄에 정점의 수 NN과 쿼리의 수 QQ가 공백을 사이에 두고 주어진다. (2≤N≤2×105,1≤Q≤2×1052 \leq N \leq 2 \times 10^5, 1 \leq Q \leq 2 \times 10^5)

둘째 줄에 ii번째 정점의 가중치 AiA_i가 공백을 사이에 두고 주어진다. (1≤Ai≤1091 \leq A_i \leq 10^9)

셋째 줄부터 N+1N+1번째 줄까지 ii번째 간선의 정보를 나타내는 세 정수 uiu_i viv_i wiw_i가 공백을 사이에 두고 주어진다. 정점 uiu_i와 정점 viv_i 사이에 가중치가 wiw_i인 간선이 있다는 뜻이다.

N+2N+2번째 줄부터 N+Q+1N+Q+1번째 줄까지 각 쿼리의 정보 tt ii xx가 공백을 사이에 두고 주어진다.

t=1t=1 또는 22이다. t=1t=1이면 1≤i≤N1 \leq i \leq N이고, t=2t=2이면 1≤i≤N−11 \leq i \leq N-1이며, 1≤x≤1091 \leq x \leq 10^9이다.

출력

Q+1Q+1개의 줄에 걸쳐 정답을 109+710^9+7로 나눈 나머지를 출력한다.

예제1

  1. 예제 1

    입력
    3 2
    1 2 3
    1 2 1
    2 3 2
    1 1 3
    2 2 4
    
    예상 출력
    31
    39
    65