#CSP1142. 比特跳跃 (jump)

比特跳跃 (jump)

题目描述

比特国由 NN 个城市构成,编号为 1,2,,N1,2,\dots,N

MM 条双向道路连接这些城市,第 ii 条连通城市 UiU_i 和城市 ViV_i,通过这条道路需要花费 WiW_i 的时间。

此外,比特国的人们还可以使用“比特跳跃“来通行于任意两个城市之间。比特跳跃所需的时间取决于两个常数,SSKK,两者均为整数。对于从城市 xx 跳跃到城市 yy

  • S=1S=1:传送需要K×(x&y)K \times (x \& y)单位时间(&\&表示按位与(bitwise AND))。
  • S=2S=2:传送需要K×(xy)K \times (x \oplus y)单位时间(\oplus表示按位异或(bitwise XOR))。
  • S=3S=3:传送需要K×(xy)K \times (x|y)单位时间(|表示按位或(bitwise OR))。

请你计算从 1 号城市移动到每个城市所需的最短时间。

输入格式

jump.in 文件读入数据。

第一行四个整数:N,M,S,KN, M, S, K

接下来的 MM 行中,第 ii 行包含三个整数:Ui,Vi,WiU_i, V_i, W_i,描述第 ii 条双向道路。

输出格式

输出到 jump.out 文件。

输出一行 N1N - 1 个整数,其中第 ii 个整数是从 11 号城市旅行到 i+1i + 1 号城市所需的最短时间。

样例

5 3 2 10
1 3 10
2 3 100
4 5 5
20 10 45 40
5 3 3 10
1 3 10
2 3 100
4 5 5
30 10 50 50
2 0 1 1
0

大样例

点击链接 ex_jump4.inex_jump4.out 下载大样例 4 的输入数据和输出数据。

点击链接 ex_jump5.inex_jump5.out 下载大样例 5 的输入数据和输出数据。

点击链接 ex_jump6.inex_jump6.out 下载大样例 6 的输入数据和输出数据。

数据范围

对于所有测试数据,

2N1052 \leq N \leq 10^5

0M1050 \leq M \leq 10^5

1S31 \leq S \leq 3

0K1060 \leq K \leq 10^6

对于所有 1iM1 \leq i \leq M1Ui,ViN1 \leq U_i, V_i \leq N

对于所有 1iM1 \leq i \leq MUiViU_i \neq V_i

对于所有 1iM1 \leq i \leq M0Wi1090 \leq W_i \leq 10^9

子任务 分数 附加约束条件
11 1919 N,M800N, M \leq 800
22 99 S=1S = 1, NN 是 2 的整数次幂
33 1111 S=1S = 1
44 3030 S=2S = 2
55 3131 S=3S = 3