旅游
题号:NC222055
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

一放假,小 L 就开心规划好自己的假期安排。

她决定去 n 个旅游景点玩。而这些旅游景点之间达成了合作,某两个景点之间会有价格固定的直通大巴(中间不会在其他景点停车)。因此,小 L 决定旅游期间直接乘坐直通大巴在各个旅游景点间往返,并且她希望每次前往另一个景点时花费最小。

由于现在处于疫情期间,每个景点都应该按照规定进行消毒。因为小 L 非常怕感染,所以她决定,只乘坐起点和目的地都进行过至少一次消毒的大巴。

输入描述:

第一行是 n,m,s,q。代表这 n 个景点之间有 m 条线路(即直通大巴),小 L 现在正处在编号为 s 的景点,q 为信息数量。

我们默认 s 号景点已消过毒。

接下来 m 行,每行三个数 u,v,w。代表编号为 u 的景点与编号为 v 的景点之间存在票价为 w 的单向(从 u 到 v)直通大巴。(存在重边和自环且有可能 u=v

接下来 q 行是信息,每行两个数 op,x。

共有两种情况:

1 x,代表编号为 x 的景点进行了一次消毒。
2 x,代表小 L 要从当前景点 y 去到编号为 x 的景点。请注意,如果小 L 不能到达 x 号景点那么她的“当前位置”不变,即仍然在 y 号景点。否则“当前位置”为 x 号景点。

输出描述:

对于每个 op=2 的操作,如果 x 号景点没有进行过至少一次消毒,或者小 L 无法到达 x 号景点,请输出 -1 。否则,请输出从当前景点出发到 x 号景点的最小费用。

示例1

输入

复制
4 7 1 4
1 2 6335
3 3 6963
1 2 9962
2 1 2392
4 2 154
2 2 7422
1 3 9896
1 1
1 3
2 1
2 3

输出

复制
0
9896

说明

小L一开始就在 1 号景点,且已消毒。第一个 op=2 的情况小 L 的目的地为 1 号景点,故只需要花费 0 费用。

第二个 op=2 的情况,小 L 的“当前位置”为 1 号景点,目的地 3 号景点已消毒,最优的方案是通过 “1 3 9896” 这条路线,故输出 9896。

数据范围:
对于 10% 的数据,n \leq 10,m \leq 100,q \leq 100
对于 100% 的数据,1 \leq n \leq 300,1 \leq m \leq 10^5,1 \leq q \leq 10^5,1 \leq w_i \leq 10^4