采蘑菇的克拉莉丝
时间限制:C/C++/Rust/Pascal 5秒,其他语言10秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

克拉莉丝在玩一个采蘑菇的游戏。游戏地图是一张N个节点,N-1条边的连通无向图。一开始起点在1号点。
游戏过程中会发生两种事件:
  • 1 v 表示在编号为v的节点新出现了x个蘑菇
  • 2 v 表示克拉莉丝的起点变成了节点v
在每个事件之后,克拉莉丝想要知道,他收集完所有的蘑菇所需的代价。
蘑菇的收集规则是这样的,对于每个蘑菇,克拉莉丝要收集它,所需要的代价是这个蘑菇所在节点和起点之间的路径上最靠近起点的边的边权。在起点上的蘑菇不需要代价就能收集。

输入描述:

第一行一个整数,表示节点数。
接下来 行,每行三个整数u,v,,表示在节点 之间有一条边权为 的无向边。
接下来一行一个整数,表示事件的个数。
接下来 行,表示事件,格式如题面所示。

输出描述:

对于每个事件,输出一个整数,表示克拉莉丝至少需要多少时间才能采集完所有的蘑菇。
示例1

输入

复制
5
1 2 3
1 3 1
2 4 2
2 5 4
9
1 3 2
1 5 3
1 4 2
2 2
1 2 5
2 4
1 1 3
2 5
2 3

输出

复制
2
11
17
22
22
20
26
48
13