bzoj#P1158. [CTSC2005]玩具的重量weight

[CTSC2005]玩具的重量weight

题目描述

冰冰有三个玩具:皮卡秋、维妮孙悟空和芭比娃娃。她并不知道这些玩具的具体重量(采用 NOI 单位),但是知道 每个玩具重量的大概范围,如下表:

皮卡秋 维妮孙悟空 芭比娃娃
最小可能重量 11 22 33
最大可能重量 33 44 55

(表 1 玩具和它们的最小、最大可能重量)

这些范围太粗略,冰冰希望能把它们缩小一些。正好佳佳有一个电子天平,不仅可以告诉你左右两边是否一样重,还可以告诉你左边比右边重(或轻)多少。天平很大,左右两边都可以放任意多件玩具。冰冰向佳佳借电子天平,希望能算出每个玩具的精确重量。佳佳为了考验冰冰,只允许她把任意一个玩具往天平的左侧和右侧最多各放一次。例如,如果她曾经把皮卡秋放在天平的左侧,则她不能再次把它放在天平的左侧。冰冰同意了。她一共称量了两次,结果如下(数字表示左边比右边重多少):

称量结果根据结果和表 1,可以确定三个玩具的重量一定是 3,4,33,4,3,也就是说,通过称量结果所得到的更新后的重量范围是:

皮卡秋 维妮孙悟空 芭比娃娃
最小可能重量 33 44 33
最大可能重量

(表 2 根据称量结果所得到的精确范围)

冰冰以后还会买很多很多玩具,她不想每次都自己计算每个玩具的重量。她需要写一个程序计算每个玩具最精确的重量下限和上限,你能帮她吗?

输入格式

输入文件第一行包含两个整数 nnmm,即玩具的个数和称量的次数。

第二行包含 2n2n 个数,第 2i12i-1 个数和第 2i2i 个数分别表示第 ii 个玩具的重量初始下限和初始上限。

以下 mm 行,每行前三个数 l,r,dl, r, d 表示左边的玩具数、右边的玩具数和左右两边的重量差,接下来的 ll 个数为天平左边的玩具编号,再接下来的 rr 个数为天平右边的玩具编号。输入保证每个玩具在天平的每一边最多出现一次。

输出格式

输出包含 2n2n 个整数,第 2i12i-1 个数和第 2i2i 个数分别表示第 ii 个玩具的重量下限和上限,即最小可能的整数重量和最大可能的整数重量。如果无解(可能是天平坏了),只输出一个数 1-1

3 2
1 3 2 4 3 5
1 1 -1 1 2
1 1 1 2 3
3 3 4 4 3 3

样例说明 #1

样例1对应于题目描述中的例子。

3 1
1 5 2 5 1 3
2 1 1 1 2 3
1 2 2 3 2 3

样例说明 #2

冰冰有三个玩具,重量的原始范围为 15,25,131\sim5, 2\sim5, 1\sim3。只有一次称量,天平的左边是玩具 11 和玩具 22,右边是玩具 33。左边比右边重 11 个单位。根据此结果,可以判断三个玩具的重量范围为 12,231\sim2,2\sim3232\sim3

数据规模与约定

对于 100%100\% 的数据,3n2003 \le n \le 2001m1001 \le m \le 100l,r0l, r \ge 0,重量上限不超过 2×1042 \times 10 ^ 4