#P16863. [ZJU3178]Beverages for Sale
[ZJU3178]Beverages for Sale
入选理由
饮料和钱都可以无限细分,顾客只购买自己喜爱集合中的最低价饮料,因此价格决定与流量分配强耦合。参考解需要把饮料和顾客建成流网络,二分当前共同价格,用最大流判断可行性,再通过残量网络中的最小割找出可以固定价格的一批饮料,重复处理直至得到全部价格。建模与实现均属高难度。
题目描述
炎热的暑假里,Tom 有若干种饮料,想把它们卖给朋友。Tom 很贪心:他希望把所有饮料全部卖完,同时拿走朋友们的全部钱。
对于每位朋友,Tom 知道:
- 他/她目前拥有多少钱;
- 他/她喜欢哪些饮料,只会购买喜欢集合中的饮料;
- 他/她非常节省,只购买喜欢集合中单价最低的饮料,并会尽可能花掉自己能支付的钱。
如果某位朋友喜欢的饮料中有多种并列最低价,那么他/她可以从这些最低价饮料中任意选择购买,甚至可以购买其中任意比例的饮料。
饮料是可分割的,钱也是可分割的。
请你为每一种饮料制定单位价格,使得 Tom 能把所有饮料卖完,并且获得所有朋友的全部钱。
输入格式
第一行一个整数 :
表示测试数据组数。
每组数据第一行两个整数 :
分别表示饮料种类数和朋友数量。
接下来一行包含 个正整数,表示每种饮料拥有的数量,每个数小于 60000。
下一行包含 个正整数,表示每位朋友拥有的钱数,每个数小于 60000。
随后 行描述每位朋友喜欢的饮料集合。每行先给出一个正整数 ,随后给出 个 到 之间的整数,表示饮料编号。
输出格式
对于每组测试数据:
- 如果存在满足要求的定价方案,输出 个实数,依次表示每种饮料的单位价格,相邻数字用空格分隔;
- 如果不存在任何方案,输出:
Impossible
本题为 Special Judge。价格答案的误差在 范围内可以接受。
样例输入
2
2 2
1 1
1 1
1 1
1 1
2 2
1 1
1 1
1 2
1 1
样例输出
Impossible
1.0 1.0
样例说明
第一组中没有任何朋友喜欢第 2 种饮料,因此不可能把它全部卖完。
第二组中,可以把两种饮料价格都设为 1,让两位朋友分别购买对应饮料,从而卖完所有饮料并拿到全部钱。