CF2179F.Blackslex and Another RGB Walking

普及+/提高

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

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

有两名玩家:玩家 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 将前往的邻居编号。

输入输出样例

  • 输入#1

    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

    输出#1

    rrgbggr
    rbbb
  • 输入#2

    second
    2
    2
    3
    grr
    3
    gbr
    
    1
    2
    rb
    

    输出#2

    1
    3
    1
    

说明/提示


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

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

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

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

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

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

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

由 ChatGPT 5 翻译

首页