#CF2077G. RGB 行走

RGB 行走

题目:G. RGB 行走

每测试点时间限制:2.5 秒
内存限制:256 兆字节

Red and Blue and Green - fn and Silentroom

题目描述

给定一个连通图,包含 nn 个顶点和 mm 条双向边,每条边的重量不超过 xx。第 ii 条边连接顶点 uiu_iviv_i,重量为 wiw_i,并带有颜色 cic_i1im1 \le i \le m1ui,vin1 \le u_i, v_i \le n)。颜色 cic_i 为红色('r')、绿色('g')或蓝色('b')。保证每种颜色的边至少有一条。

对于一条行走(walk)(顶点和边均可重复),记 sr,sg,sbs_r, s_g, s_b 分别表示行走经过的红色、绿色、蓝色边的重量之和。如果一条边被多次经过,则每次经过都单独计入对应颜色的总重量。

求所有从顶点 11 到顶点 nn 的行走中,

max(sr,sg,sb)min(sr,sg,sb)\max(s_r, s_g, s_b) - \min(s_r, s_g, s_b)

的最小值。


输入格式

每个测试点包含多个测试用例。第一行输入测试用例个数 tt1t1041 \le t \le 10^4)。每个测试用例描述如下:

  • 第一行三个整数 n,m,xn, m, x4n21054 \le n \le 2 \cdot 10^5n1m2105n-1 \le m \le 2 \cdot 10^51x21051 \le x \le 2 \cdot 10^5)—— 顶点数、边数、以及边重量的上界。
  • 接下来 mm 行,每行包含两个整数 ui,viu_i, v_i,一个整数 wiw_i 和一个字母 cic_i1ui,vin1 \le u_i, v_i \le n1wix1 \le w_i \le x),表示一条连接 uiu_iviv_i 的双向边,重量为 wiw_i,颜色为 cic_i'r', 'g', 'b')。

保证图连通,且每种颜色的边至少有一条。图中可能包含重边和自环。

此外,所有测试用例的 nn 的总和、mm 的总和、xx 的总和各自不超过 21052 \cdot 10^5


输出格式

对于每个测试用例,输出一个整数 —— 所有从 11nn 的行走中,max(sr,sg,sb)min(sr,sg,sb)\max(s_r, s_g, s_b) - \min(s_r, s_g, s_b) 的最小值。


示例

输入

3
4 3 3
1 2 2 r
2 3 3 g
3 4 2 b
4 5 4
1 2 1 r
1 1 1 r
2 1 1 r
2 3 4 g
3 4 4 b
4 6 4
1 2 2 r
1 2 2 r
2 3 3 b
1 3 4 r
1 4 1 g
3 4 4 g

输出

1
0
0

示例解释

第一个测试用例
最优行走为 12341 \to 2 \to 3 \to 4。使用的边:

  • 121 \to 2(红色,重量 22
  • 232 \to 3(绿色,重量 33
  • 343 \to 4(蓝色,重量 22
    得到 sr=2s_r = 2sg=3s_g = 3sb=2s_b = 2,所以答案是 32=13 - 2 = 1

第二个测试用例
一个最优行走为 11212341 \to 1 \to 2 \to 1 \to 2 \to 3 \to 4。使用的边:

  • 111 \to 1(红色,重量 11
  • 121 \to 2(红色,重量 11
  • 212 \to 1(红色,重量 11
  • 121 \to 2(红色,重量 11
  • 232 \to 3(绿色,重量 44
  • 343 \to 4(蓝色,重量 44
    得到 sr=sg=sb=4s_r = s_g = s_b = 4,所以答案是 00