#L3320. 「CCO 2020」旅行商问题

「CCO 2020」旅行商问题

题目描述

译自 CCO 20202020 Day22 T11「Travelling Salesperson」,翻译者:EntropyIncreaser & jinhaoxian。

在红蓝城,每一对建筑之间都有一条无向边,每条边为红色或蓝色。定义路径的代价为边的颜色切换次数、路径长度为经过的建筑的个数(重复经过同一建筑需要重复计入)。如图,以下路径长度为 55,代价为 11

如果第二次到达建筑 33 之后再经由蓝边到达建筑 22,则代价会增加 11,即总代价为 22

作为一个旅行商,你需要设计一条路径,满足该路径经过每个建筑至少一次(起点和终点视为经过),且该路径的代价不超过 11。在此前提下,你希望最小化重复经过的建筑数(即最小化路径长度)。对于每个建筑 ii,以 ii 为起点设计一条满足上述条件的路径(终点可任选)。

输入格式

第一行输入一个正整数 NN,表示建筑数量。

22NN 行每行一个字符串,其中第 ii 行的字符串 Ci=Ci,1Ci,2Ci,i1C_i=C_{i,1}C_{i,2}\cdots C_{i,i-1} 表示连接建筑 ii 的边的颜色。对于字符 Ci,j(1j<i)C_{i,j}\,(1\le j<i),若该字符为 R,表示连接 iijj 的边为红边;若该字符为 B,表示连接 iijj 的边为蓝边。

输出格式

输出 2N2N 行。

2i12i-1 行(1iN1\le i\le N)输出一个整数 MiM_i,表示你所构造的以 ii 为起点的路径长度。

2i2i 行(1iN1\le i\le N)输出 MiM_i 个整数,相邻两个整数间用单个空格分隔,表示这条路径依次经过的节点。其中,第一个整数应为 ii

样例

输入

4
R
RR
BRB

输出

5
1 4 2 1 3
6
2 3 1 2 3 4
5
3 1 2 3 4
4
4 3 1 2

对于该组样例,以 33 为起点的合法路径最小长度为 44(依次经过建筑 3,2,1,43,2,1,4),故在该路径上的得分是

$4\times \lfloor 8 + 8\times \frac{2\times 4 - 5}{4-1} \rfloor = 64$,即得分不会超过 6464

数据范围与提示

对于 100%100 \% 的数据,2N20002 \le N \le 2000, Ci,j{R,B}C_{i,j}\in \{R,B\}

KiK_i 是以 ii 为起点的最短合法路径的长度。如果存在一组 Mi>2KiM_i > 2K_i,则在该测试点得 00 分并被判为 Wrong Answer。

如果对于每个 1iN1\le i\le N 均满足 Ki=MiK_i=M_i,则在该测试点得 100100 分。否则,在该测试点的得分将是

$\min_{\substack{1\le i\le N}}\{4\times \lfloor 8 + 8\times \frac{2K_i - M_i}{K_i-1} \rfloor\}$。

特别地,若构造的某条路径不合法,则在该测试点得 00 分并被判为 Wrong Answer。

选手在本题的得分为所有测试点得分的最小值。