题目给出了 n 台仪器,以及 m 条形如“仪器 i 的读数比仪器 j 高 k”的偏差关系。我们需要为每台仪器分配一个正整数读数 xi(1≤xi≤1018),使得所有关系同时成立,或者判断无解。
这类问题本质上是带权图的连通块遍历与差分约束验证,具体步骤如下:
在一个精密实验室中,有 n 台仪器需要校准。 已知这些仪器之间存在 m 组确定的读数偏差关系,每组关系表示为: 仪器 i 的读数比仪器 j 的读数恰好高 k。
你需要为每一台仪器分配一个正整数的读数 xi,使得所有偏差关系同时成立, 并且每台仪器的读数必须落在 1 到 1018 的范围之内。
请判断是否能够给出这样的读数分配方案。
数据范围与约束
第一行包含一个整数 T,表示测试数据的组数。 接下来依次描述每组数据,格式如下: 第一行包含两个整数 n 和 m,分别表示仪器台数和偏差关系条数。 接下来 m 行,每行包含三个整数 i、j 和 k,表示仪器 i 的读数应比仪器 j 的读数高 k。 保证 1≤i,j≤n,∣k∣≤106。
对于每组测试数据,输出一行:
如果存在符合要求的读数分配方案,输出 n 个整数 x1,x2,…,xn,依次表示每台仪器的读数;
如果不存在这样的方案,输出 -1。
输入
1
3 2
2 1 3
3 2 5
输出
1 4 9
说明
根据关系:仪器 2 比仪器 1 高 3,即 a2=a1+3;仪器 3 比仪器 2 高 5,即 a3=a2+5=a1+8。若取 a1=1,则 a2=4,a3=9,所有读数均在 [1,1018] 范围内且无矛盾。因此输出 1 4 9。
输入
1
3 3
1 2 2
2 3 3
3 1 -4
输出
-1
说明
由 a1−a2=2 得 a1=a2+2;由 a2−a3=3 得 a2=a3+3,代入得 a1=a3+5。但 a3−a1=−4 给出 a3=a1−4,即 a1=a3+4。这与 a1=a3+5 矛盾,因此无法分配,输出 -1。
输入
1
5 3
1 2 7
3 4 -2
4 5 10
输出
8 1 9 11 1
说明
图中存在两个独立的连通块。
第一个连通块包含仪器 1 和 2,约束 a1−a2=7。令 a2=1,则 a1=8。
第二个连通块包含仪器 3、4、5。由 a3−a4=−2 得 a4=a3+2;由 a4−a5=10 得 a5=a4−10。若令 a5=1,则 a4=11,a3=9。
所有读数均为正整数且不超过 1018,满足全部关系,故输出 8 1 9 11 1。
输入
1
2 0
输出
1 1
说明
没有任何偏差关系,两台仪器可以独立取最小值 1。该分配满足 1leaile1018,且无矛盾,因此输出 1 1。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册