#P9274. [AGM 2023 资格赛] 建设计划

[AGM 2023 资格赛] 建设计划

题目描述

一组工程师正在计划建造一座新工厂。为了使他们的工厂可靠,他们希望以恒定且可靠的单位每秒速率创建各种物品。他们可以使用不同的机器来制作这些材料。每个机器都有自己的速度,影响制作过程。每种材料都有自己的制作配方,必须在特定的机器执行。

您将获得每个机器的描述以及您需要的每种材料和中间材料的配方。你也会得到一份材料清单,你必须以一定的速度生产,这样你的工厂是可靠的。

我们认为一种机器配置是最优的,当且仅当如果从配置中移除任意一台机器,至少有一种材料的生产速率小于所需的速率。

你需要找到一种最优的配置。

输入格式

输入的第一行将包含一个整数 M(1M100)M(1≤M≤100),表示我们拥有的机器类型的数量。在接下来的 MM 行中,每一行都有一个字符串 n(1n30)n(1≤|n|≤30) 和一个数字 s(0.01s100)s(0.01≤s≤100),表示一台机器的名称和速度。

下面一行输入将包含一个整数 N(1N100)N(1≤N≤100),表示配方的数量。

接下来输入 nn 组配方。对于每组配方,在配方的第一行,字符串 p(1p30)p(1≤|p|≤30) 表示要制作的材料的名称,字符串 l(1l30)l(1≤|l|≤30) 表示制作过程中使用的机器名称,数字 t(0.01t100)t(0.01≤t≤100) 表示以正常速度制作材料所需的时间(以秒为单位)。在下一行中,有一个数字 k(0k15)k(0≤k≤15),表示生产当前这个材料过程中所需另外材料的种类数。下面的 kk 行中,每一行包含一个字符串 n(1n30)n(1≤|n|≤30) ,表示所需材料的名称,一个整数 c(1c10)c(1≤c≤10),表示所需的相应材料的单位数。

下一行将包含一个整数 Q(1Q100)Q(1≤Q≤100),表示需求的数量。

下面的每一条 QQ 行都包含一个字符串 m(1m30)m(1≤|m|≤30),表示需要这个需求下生产的材料的名称,以及一个整数 c(1c10)c(1≤c≤10),表示每秒需要生产的该材料的单位数。

sstt 都是有两个小数点的浮点数。保证存在最优配置。保证最优解中每种材料的生产速率不超过每秒 10910^9个单位,每种材料都可以使用独特的配方制作。并且保证配方的需求关系不存在环。

输出格式

总共 nn 行,在第 nn 行,输出 pi,li,rip_i,l_i,r_i,其中 rir_i 表示用来执行第 ii 个配方的机器数量。

3
assembler 0.50
furnace 0.50
mining_well 0.55
6
iron_plate furnace 3.20
1
iron_ore 1
copper_plate furnace 3.20
1
copper_ore 1
iron_ore mining_well 1.00
0
copper_ore mining_well 1.00
0
copper_cable assembler 0.50
1
copper_plate 1
electronic_circuit assembler 0.50
2
iron_plate 1
copper_cable 3
1
electronic_circuit 10
iron_plate furnace 64
copper_plate furnace 192
iron_ore mining_well 19
copper_ore mining_well 55
copper_cable assembler 30
electronic_circuit assembler 10
3
assembler 0.50
furnace 0.50
mining_well 0.55
4
iron_plate furnace 3.20
1
iron_ore 1
iron_ore mining_well 1.00
0
iron_gear assembler 0.50
1
iron_plate 2
transport_belt assembler 0.50
2
iron_plate 1
iron_gear 1
1
transport_belt 7
iron_plate furnace 135
iron_ore mining_well 39
iron_gear assembler 7
transport_belt assembler 7