#P11315. [RMI 2021] 速通 / Speedrun

    ID: 14427 远端评测题 3500ms 512MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>2021交互题Special Judge树的遍历通信题RMI(罗马尼亚)

[RMI 2021] 速通 / Speedrun

题目背景

译自 9th Romanian Master of Informatics, RMI 2021 D1T3。3.5s,0.5G\texttt{3.5s,0.5G}

评测时,不要引入头文件。在文件头加入如下的语句:

void setHintLen(int);
void setHint(int,int, bool);
int getLength();
bool getHint(int);
bool goTo(int);

题目描述

这是一道通信题。

你在一棵 NN 个节点的树上,从某个节点出发跑酷。

你不知道这棵树的具体形态,只知道现在自己在哪个节点。你在点 uu 时,唯一能做的就是选择一个 vv,尝试走到 vv。如果 (u,v)(u,v) 这条边存在,你会走到 vv;否则你将留在原地。

需要注意的是,你最多能试错 QQ。也就是说,如果你超过 QQ 次选择了一条不存在的边,就失败了。

当你经过每个节点至少一次时,我们说你速通成功

现在有一个作弊的机会。你可以在每个节点放一个长度为 ll01\texttt{01} 串,当你在某个节点时,可以读取那个节点上 01\texttt{01} 串的信息。需要注意的是,在放置 01\texttt{01} 串的时候你是知道这棵树的形态的,但是你不知道自己跑酷时的出发点。

请你找到一种设置信息和速通的方式,使得速通成功。

实现细节

你不需要,也不应该实现 main 函数。

你需要实现以下的函数:

void assignHints(int subtask, int N, int A[], int B[]);
void speedrun(int subtask, int N, int start);

你可以调用以下的函数:

void setHintLen(int l);
void setHint(int i, int j, bool b);
int getLength();
bool getHint(int j);
bool goTo(int x);

第一次运行

第一次运行用于确定每个节点上的信息。

交互库将会调用 assignHints 函数恰好一次。参数的含义:

  • subtask:子任务编号。
  • N:树的节点数量。
  • A[], B[]:长度为 NN 的整数数组,含义为对于每个 i=1,2,,N1i=1,2,\cdots, N-1A[i],B[i]A[i],B[i] 间有一条边连接。

随后,你需要立刻调用 setHintLen 函数恰好一次。传入正整数 l 表示你的 01\texttt{01} 串的长度。

01\texttt{01} 串起初全为 00

接下来,你可以多次调用 setHint,其中 1jl1\le j\le l,表示将节点 ii01\texttt{01} 串的第 jj 位设置成 b

在第一次运行中,禁止调用 getLengthgetHintgoTo

第二次运行

交互库将会调用 speedrun 函数恰好一次。参数的含义:

  • subtask:子任务编号。
  • N:树的节点数量。
  • start:你的初始位置。

调用 getLength 来获得 01\texttt{01} 串的长度。

当你在节点 ii 时,调用 getHint(j) 来获得当前节点上 01\texttt{01} 串的第 jj 位。

可以调用 goTo 来尝试移动一步。如果成功,返回值为 true;否则返回值为 false

在第二次运行中,禁止调用 setHintsetHintLen

提示

对于 100%100\% 的数据,保证 1N1031\le N\le 10^3

QQgoTo 函数返回 False 的最大次数,LLll 的最大值。超出限制,得 00 分。

子任务编号 LL\le QQ\le 树的形态 计分方式 得分
1 1 N N 20002\,000 I 2121
2 2 20 20 菊花图 88
3 3 1919
4 4 316 316 3200032\, 000 1212
5 5 40 40 20002\, 000 II 4040
  • 菊花图:存在一个度数为 (N1)(N-1) 的节点。
  • 链:每个节点度数均不大于 22
  • 计分方式 I\text{I}:成功遍历树,得满分;否则得 00 分。
  • 计分方式 II\text{II}:成功遍历树的得分为 min(40,60l)\min(40,60-l)