问题描述
在比赛中,出了以下问题,但是裁判解决方案中没有考虑同时持有多个物品的情况。根据本次问题的限制条件,在规定的时间内解决此类问题几乎不可能。非常抱歉地给您带来了不合适的提问。
作为问题负责人,我认为在下面的问题中添加“同时只能持有一个物品”的限制将会是一个适当的问题。(9/15 17:47)
在中野先生所居住的世界里,使用自己制作的工具挖掘洞穴成为一种风靡的流行事物。
共有M种类型的工具,可以通过加工铁矿石来制作。有些工具只需要铁矿石就可以制作出来,但有些工具除了铁矿石外,还需要使用其他工具。此外,一些工具在用于制作其他工具时会损坏,不能再继续使用。
无论工具是否损坏,都可以将其分解成铁矿石,并将其作为其他工具的材料进行再利用。然而,分解得到的铁矿石数量少于制作该工具所需的铁矿石数量。
中野先生想要一款在探险中必备的工具,他在手头有N个铁矿石,想知道能否用这些铁矿石制作出来。遗憾的是,在中野先生所居住的世界中,没有特殊的工具就无法制作计算机。你的工作是代替中野先生判断是否可以制作出他想要的工具。
输入
输入以以下格式给出。
M N K
a_1 b_1 c_1 d_1
s_1,1 v_1,1,1 v_1,1,2 ... v_1,1,s_1,1
s_1,2 v_1,2,1 v_1,2,2 ... v_1,2,s_1,2
:
:
s_1,d_1 v_1,d_1,1 v_1,d_1,2 ... v_1,d_1,s_1,d_1
a_2 b_2 c_2 d_2
:
:
a_M b_M c_M d_M
s_M,1 v_M,1,1 ... v_M,1,s_M,1
:
:
s_M,d_M v_M,d_M,1 v_M,d_M,2 ... v_M,d_M,s_M,d_M
第一行给出三个数M,N,K。M代表可以制作的工具类型数目,N代表中野先生拥有的铁矿石数目,K代表中野先生想要制作的工具编号。
接下来的行依次给出第一个到第M个工具的信息。每个工具的信息以包含四个数a_i,b_i,c_i,d_i的行开始。a_i是制作该工具所需的铁矿石数量,b_i是分解该工具可以得到的铁矿石数量。
当c_i=0时,工具i使用一次后就会损坏;当c_i=1时,工具i可以反复使用。
接下来的d_i行给出了制作该工具所需的工具组合。这些行以所需工具数s_i,j开始,后跟s_i,j个数v_i,j,1,v_i,j,2,cdots,v_i,j,s_i,j。其中v_i,j,k表示制作工具i所需的工具组合。如果没有拥有这些工具中的全部,则无法制作第i个工具。而d_i个组合中只要满足其中任意一个,就可以制作出工具i。当d_i=0时,工具i可以单独制作。
约束条件
- 1≤M≤18
- 0≤N≤106
- 1≤K≤M
- 1≤b_i<a_i≤106
- 0≤d_i≤3
- 1≤v_i,j,k≤M
- 当k=k′时,v_i,j,k=v_i,j,k′
输出
如果能够制作出第K个工具,则输出"yes";否则输出"no"。
示例输入1
4 10 4
4 3 0 0
4 3 0 0
2 1 0 1
1 2
2 1 0 1
2 1 3
示例输出1
yes
示例输入2
4 8 4
4 3 1 0
4 3 0 0
2 1 0 1
1 2
2 1 0 1
2 1 3
示例输出2
no
示例输入3
4 8 4
4 3 1 0
4 3 0 0
2 1 0 2
1 1