#CF2179F. Blackslex and Another RGB Walking

    ID: 7240 通信题 2000ms 256MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>communication构造图论交互数论CodeforcesCodeforces Round 1071(Div3)Div3FCF2179F2000

Blackslex and Another RGB Walking

题目描述

这是一个二次运行(通讯)问题。

有两名玩家:玩家 A(Agent,特工)和玩家 B(Blackslex)。评测机会先与玩家 A 交互。在玩家 A 结束交互后,评测机会与玩家 B 交互。注意,玩家 A 和玩家 B 不能直接传递信息;他们只能向评测机发送或从评测机接收信息,但可以事先约定通信策略。

企鹅共和国是一个连通的无向二分图 GG,有 nn 个顶点和 mm 条边。Blackslex 将在顶点 11 进行违禁野外研究。由于旅行限制,他将被随机送往一个未知顶点 vv2vn2 \leq v \leq n)。他必须设法到达顶点 11,但他对图结构一无所知。

为完成任务,他贿赂了一名企鹅特工,并提前约定了如下通信方式:特工将每个顶点涂成三种颜色之一:红色(r)、绿色(g)、蓝色(b)。对 Blackslex 来说,他只能看到他所在顶点 vv 的每个邻居 uiu_i1id(v)1 \leq i \leq d(v))的颜色 cic_i。之后,他必须选择某一个 jj1jd(v)1 \leq j \leq d(v)),并前往顶点 uju_j,使得他离顶点 11 更近。

邻居顺序是任意排列的。他只能看到周围邻居的颜色,无法得知自己当前所处的顶点编号;同样他也不知道相邻顶点的编号或任意其他顶点的信息。

你的任务是为特工和 Blackslex 分别实现策略。对于特工,需要将每个顶点染成三种颜色之一。对于 Blackslex,在每次询问中,他被随机放置在某个未知顶点 vv,并给出所有邻居当前的颜色,你需要确定应前往哪一个邻居 uju_j,使他能朝顶点 11 前进。

^* d(v)d(v) 表示顶点 vv 的邻居数量。

输入格式

你的代码将在每组测试中被精确运行两次。第一次运行时你作为玩家 A(Agent),第二次运行时你作为玩家 B(Blackslex)。

第一次运行输入

第一行输入字符串 first,用于让你的程序判断这是第一次运行,应作为 Agent 角色。

每组测试包含多个测试用例。第一行输入一个整数 tt1t1041 \leq t \leq 10^4),表示测试用例数量。

每个测试用例的第一行输入两个整数 nnmm2n1052 \leq n \leq 10^5n1m105n-1 \leq m \leq 10^5),分别表示顶点数和边数。

接下来 mm 行每行包含两个整数 aia_ibib_i1ai,bin1 \leq a_i, b_i \leq naibia_i \neq b_i),表示顶点 aia_i 与顶点 bib_i 之间有一条边。

保证以下条件:

  • 所有测试用例中 nn 之和与 mm 之和均不超过 10510^5
  • 每个测试用例的图都是连通的、无重边和自环的二分图。

第二次运行输入

第一行输入字符串 second,用于让你的程序判断这是第二次运行,应作为 Blackslex 角色。

每组测试包含多个测试用例。第一行输入整数 tt1t1041 \leq t \leq 10^4),与第一次运行输入的 tt 相同。每个测试用例的描述如下。

第一行输入一个整数 qq1q1051 \leq q \leq 10^5),表示本测试用例中的询问数。

每个询问的第一行输入一个整数 d(v)d(v)1d(v)1051 \leq d(v) \leq 10^5),表示当前顶点 vv 的邻居数量。

接下来一行输入一个长度为 d(v)d(v) 的字符串 cc,表示所有邻居的颜色,第 ii 位(1id(v)1 \leq i \leq d(v))为邻居 uiu_i 的颜色,可能为 r(红)、g(绿)、b(蓝)。

保证以下条件:

  • 所有测试用例中 qq 之和不超过 10510^5
  • 所有测试用例中 d(v)d(v) 之和不超过 21052 \cdot 10^5
  • v1v \neq 1

第二次运行输入是非自适应的,即不会因你的程序输出而改变。

Hack 数据

构造 Hack 时,请使用如下输入格式:

第一行输入整数 tt1t1041 \leq t \leq 10^4),表示测试用例数量。

接下来是每组测试用例的第一次运行描述:

每个测试用例第一行输入两个整数 nnmm2n1052 \leq n \leq 10^5n1m105n-1 \leq m \leq 10^5),描述图。

接下来 mm 行每行输入两个整数 aia_ibib_i,表示有一条 aia_ibib_i 的边。

然后是每个测试用例第二次运行的描述:

每个测试用例的第一行输入一个整数 qq1q1051 \leq q \leq 10^5),为该用例中询问数量。

每个询问的第一行输入一个整数 vv2vn2 \leq v \leq n),表示 Blackslex 被放置的顶点编号。

每个询问第二行输入 d(v)d(v) 个整数 p1,p2,,pd(v)p_1, p_2, \ldots, p_{d(v)}1pid(v)1 \leq p_i \leq d(v),且 pp 中每个数各不相同),表示邻居的排列顺序。设 q1<q2<<qd(v)q_1 < q_2 < \ldots < q_{d(v)}vv 的所有邻居,输入序中第 ii 个邻居为 ui=qpiu_i = q_{p_i}

必须保证如下条件:

  • 所有测试用例第一次运行中 nnmm 之和均不超过 10510^5
  • 每个测试用例图是连通、无重边且为二分图。
  • 所有测试用例二次运行询问中 qq 之和不超过 10510^5
  • 所有测试用例 d(v)d(v) 总和不超过 21052 \cdot 10^5

输出格式

对于第一次运行的每个测试用例,输出一个字符串 ss,长度为 nn,其中 sis_i1in1 \leq i \leq n)为你给第 ii 个顶点染的颜色。每个字符只能为 r(红)、g(绿)、b(蓝)。

对于第二次运行的每个测试用例中每个询问,输出一个整数 jj1jd(v)1 \leq j \leq d(v)),uju_j 为 Blackslex 将前往的邻居编号。

样例

first
2
7 8
1 2
1 6
3 2
4 2
6 4
4 7
5 6
5 7

4 4
1 2
1 3
4 2
4 3
rrgbggr
rbbb
second
2
2
3
grr
3
gbr

1
2
rb
1
3
1

样例说明

图与样例中的染色方案如上图所示。

在第二次运行中,第一个测试用例有两个询问。

第一个询问在顶点 44,其邻居为 662277。选择第一个邻居即走向顶点 66

第二个询问在顶点 66,邻居为 554411。选择第三个邻居(即走向顶点 11)。

第二个测试用例有一个询问,位于顶点 22,邻居为 1144。选择第一个邻居即走向顶点 11

请注意,由于便于阅读,样例间加了空行,实际测试数据没有空行。

[比赛时仅供参考] 图片无法显示时的备用图片链接:https://ibb.co/yFZS16vj

由 ChatGPT 5 翻译

来源

Codeforces 2179F,英文题名 Blackslex and Another RGB Walking。