#arc0094. [arc009_4]覚醒ノ高橋君

[arc009_4]覚醒ノ高橋君

问题

在AtCoder国,有许多城镇存在。 为了管理城镇,存在市,市是城镇的集合。 市内的城镇通过道路相连。通过这些道路,可以往返于市内的所有城镇。 但是,仅凭这些道路无法移动到其他市中的城镇。 因此,在AtCoder国,为了解决这个问题,通过在多个市中管理一些城镇来连接市与市,使得可以往返于所有的市。

由于在多个市中管理一个城镇非常麻烦,所以尽可能地减少共享的数量。 具体而言,假设有N个市,用k个市共享的城镇数为Sk,则满足Σ(Sk×(k-1))=N-1。

高桥君是AtCoder国的交通大臣,他希望将修建道路的成本总和尽可能地减小。 但是他对只有一个计划表示不安,所以决定考虑第k个最好的计划。

该计划的内容如下:

  • 无论穿越哪两个城镇,移动时都不会重复经过同一个城镇,使得路径仅确定为一个。
  • 修建道路指的是减少城镇之间的道路。

他发现满足这个条件的计划有很多。 因此,将计划的成本定义为修建道路的总成本。 成本越小,计划越好。

请输出第k个最好的计划的成本。如果第k个值不存在,则输出-1。

输入

输入是通过标准输入给出的。已附加约束的描述。 第一行包含三个整数A、T和k。 接下来的2×A行给出了与各个市相关的城镇信息。

  • 前N(2≦N≦7)行表示属于第i个市的城镇数。
  • Ci,j(1≦Ci,j≦T)表示属于第i个市的第j个城镇。

M表示道路的数量,是一个非负整数。从输入的最后一行开始的M行给出了道路的信息。

  • Cityi,1和Cityi,2表示第i条道路连接的城镇。也就是说,Cityi,1和Cityi,2可以双向移动,属于同一个市。
  • Costi(1≦Costi≦77)表示第i条道路的修建成本。

输出

请输出第k个最好的计划的成本。如果第k个值不存在,则输出-1

示例

输入示例1:

3 7 1
3
1 2 3
3
3 4 5
3
5 6 7
9
1 2 1
1 3 2
2 3 3
3 4 3
3 5 6
4 5 9
5 6 9
5 7 18
6 7 27

图:输入示例1的示意图

输出示例1:

13

图:输出示例1的示意图

  • 第1个最好的计划是删除连接城镇1和城镇2的道路,删除连接城镇3和城镇4的道路,删除连接城镇5和城镇6的道路。

输入示例2:

2 3 2
2
1 2
2
2 3
2
1 2 1
2 3 1

输出示例2:

-1
  • 第2个最好的计划的成本不存在,因此输出-1

输入示例3:

4 9 2
3
1 2 3
3
3 4 5
3
5 6 7
3
5 8 9
12
1 2 1
1 3 1
2 3 1
3 4 3
3 5 3
4 5 3
5 6 6
5 7 3
6 7 9
5 8 9
5 9 18
8 9 27

输出示例3:

16
  • 成本为16的计划是最小的,但是有9种可以达到相同成本的计划。因此,第2个计划的成本也是16。

来源

ARC 009