간단한 트리 문제
시간 제한8초메모리 제한1024 MB
정점과 간선의 가중치가 갱신되는 트리에서 모든 경로에 대해 (정점 가중치 합) 곱하기 (간선 가중치 합)을 더한 값을 각 갱신마다 구한다.
문제
개의 정점과 개의 간선으로 이루어진 트리가 있다. 각 정점에는 번부터 번까지, 각 간선에는 번부터 번까지 번호가 붙어 있으며 모든 정점과 간선에는 가중치가 부여되어 있다. 다음 쿼리를 처리하는 프로그램을 작성하시오.
- : 번 정점의 가중치를 로 변경한다.
- : 번 간선의 가중치를 로 변경한다.
최초 트리 상태와 각 변경 쿼리마다 모든 개의 서로 다른 경로에 대하여 (경로 위 정점 가중치의 합)(경로 위 간선 가중치의 합)의 합을 로 나눈 나머지를 출력하시오.
입력
첫째 줄에 정점의 수 과 쿼리의 수 가 공백을 사이에 두고 주어진다. ()
둘째 줄에 번째 정점의 가중치 가 공백을 사이에 두고 주어진다. ()
셋째 줄부터 번째 줄까지 번째 간선의 정보를 나타내는 세 정수 가 공백을 사이에 두고 주어진다. 정점 와 정점 사이에 가중치가 인 간선이 있다는 뜻이다.
번째 줄부터 번째 줄까지 각 쿼리의 정보 가 공백을 사이에 두고 주어진다.
또는 이다. 이면 이고, 이면 이며, 이다.
출력
개의 줄에 걸쳐 정답을 로 나눈 나머지를 출력한다.