#P16695. [ICPC 2017 Jakarta R]Parks of Jakarta

[ICPC 2017 Jakarta R]Parks of Jakarta

题目描述

雅加达有三个公园,分别称为公园 11、公园 22 和公园 33

雅加达的新任州长希望通过摆放砖块来装饰这些公园。砖块会在三个公园中分别堆成若干堆。

共有 NN 块砖,编号为 11NN。编号为 ii 的砖比编号为 i+1i+1 的砖小。

不能把较大的砖放在较小的砖上。因此,编号为 ii 的砖可以放在编号为 jj 的砖上,当且仅当:

i<j.i<j.

定义一种砖块状态为:将全部砖块分配到三个公园中,并满足:

  • 每个公园中至多有一摞砖;
  • 每摞砖都符合上述大小顺序。

例如,当 N=3N=3 时,一种合法状态是:

  • 公园 11 中,砖块 11 在砖块 22 上方;
  • 公园 22 中没有砖;
  • 公园 33 中放置砖块 33

可以通过一次操作把一种状态变成另一种状态。一次操作如下:

  1. 选择两个不同的公园 iijj
  2. 取出公园 ii 最上方的砖块,并放到公园 jj 的最上方。

若公园 ii 中没有砖,则该操作非法。

若移动后公园 jj 中的砖块顺序不合法,则该操作同样非法。

把一块砖从公园 ii 运到公园 jj 需要支付 Ri,jR_{i,j} 单位费用。运输费用可能不对称,即:

Ri,jR_{i,j}

不一定等于

Rj,i.R_{j,i}.

初始时,砖块处于某个给定的初始状态。

州长希望依次观察若干指定状态。你可以自行决定访问这些指定状态的顺序,但每一个指定状态都必须至少出现一次。

完成这些要求后,还必须把所有砖块集中到任意一个公园中。

请计算满足全部要求所需的最小总费用。

更形式化地,给定州长要求访问的状态:

G1,G2,,GM.G_1,G_2,\ldots,G_M.

需要构造状态序列:

C0,C1,,Ck(k0),C_0,C_1,\ldots,C_k\qquad(k\ge0),

使得:

  • C0C_0 是初始状态;
  • 对每个 1iM1\le i\le M,至少存在一个下标 xix_i,满足 Cxi=GiC_{x_i}=G_i
  • CkC_k 中全部砖块位于同一个公园;
  • 对每个 0i<k0\le i<k,可以通过一次合法操作从 CiC_i 变为 Ci+1C_{i+1}
  • 总费用最小。

指定状态的访问顺序不受输入顺序限制。

输入格式

第一行包含两个整数 N,MN,M

1N40,0M16,1\le N\le40,\qquad 0\le M\le16,

分别表示砖块数量和州长要求访问的状态数量。

接下来三行,每行包含三个整数。第 ii 行的第 jj 个整数为 Ri,jR_{i,j},表示从公园 ii 向公园 jj 搬运一块砖的费用。

满足:

0Ri,j1000,0\le R_{i,j}\le1000,

并且:

Ri,i=0.R_{i,i}=0.

随后用三行描述初始状态。第 ii 行的格式为:

K b1 b2 ... bK

表示公园 ii 中有 KK 块砖,从上到下依次为:

b1,b2,,bK.b_1,b_2,\ldots,b_K.

K=0K=0 时,该行只包含一个 0

保证:

0KN,0\le K\le N,

每一摞砖的编号严格递增,并且 11NN 的每块砖在三个公园中恰好出现一次。

接下来依次描述 MM 个州长要求访问的状态。每个状态同样由三行组成,格式与初始状态完全相同。

输出格式

输出一个整数,表示满足全部要求所需的最小总费用。

样例 1

输入

3 0
0 1 1000
1 0 1
1000 1 0
2 1 2
0
1 3

输出

5

样例 2

输入

3 2
0 2 2
2 0 2
2 2 0
2 1 2
1 3
0
3 1 2 3
0
0
0
0
3 1 2 3

输出

22