QOJ.ac

QOJ

時間限制: 2 s 記憶體限制: 512 MB 總分: 100

#2422. 内幕消息

统计

为什么没人告诉你计算机科学书籍会如此枯燥?!你从中学不到什么进展,你的 BOI 奖牌也变得遥不可及。但等等——谁说你必须堂堂正正地赢得它呢?*

BOI 官员已经提到,任务说明保存在一个秘密金库中,只有科学委员会主席才能打开。因此,这些说明是你无法触及的。然而,提前获取测试数据听起来是可行的,并且应该足以让你获得优势。

不幸的是,科学委员会已经采取了措施来防止可能的不公平。他们将测试数据拆分为 $N$ 个数据块,并将其分发给编号为 $1$ 到 $N$ 的 $N$ 个服务器。最初,服务器 $i$ 持有数据块 $i$。这 $N$ 个服务器通过 $N-1$ 条线路连接,使得任意两个服务器都可以直接或间接地相互连接。不时地,两个服务器会共享它们的数据,这意味着之后两者都存储相同的数据块,即它们之前各自存储的所有数据块的并集。任意两个直接相连的服务器,且仅有这些服务器,会精确地共享一次数据。

你已经获得了整个共享操作序列。为了协调你的黑客攻击,你希望在某些时间点(在两次共享操作之间)了解测试数据目前在服务器间的分布情况。更准确地说,你想要查询某个给定的服务器当前是否存储了某个给定的数据块,或者有多少个服务器当前存储了某个给定的数据块。

编写一个程序,根据给定的 (a) 共享操作序列和 (b) 每个查询发生的时间,来回答这些问题。

输入格式

输入描述了共享操作和查询的序列。第一行包含两个整数 $N$ 和 $K$。接下来的 $N + K - 1$ 行中,每一行可能具有以下形式之一:

  • S a b 表示服务器 $a$ 和 $b$ 共享它们的所有数据。
  • Q a d 表示你查询服务器 $a$ 当前是否存储了数据块 $d$。
  • C d 表示你查询当前存储数据块 $d$ 的服务器数量(计数)。

其中 $N - 1$ 行以 S 开头,$K$ 行以 QC 开头。

输出格式

对于输入中的每个查询 Q a d,如果查询时服务器 $a$ 存储了数据块 $d$,你的程序应输出一行字符串 yes,否则输出 no。对于每个查询 C d,你的程序应输出一行包含单个整数:查询时存储数据块 $d$ 的服务器数量。当然,每个查询的答案仅取决于查询之前发生的共享操作。

数据范围

始终满足 $1 \le N, K \le 120\,000$。

  • 子任务 1(5 分):$N \le 4\,000$
  • 子任务 2(5 分):服务器 1 与服务器 $2, 3, \dots, N$ 直接相连。
  • 子任务 3(10 分):服务器 $A$ 和 $B$ 直接相连,当且仅当 $|A - B| = 1$。
  • 子任务 4(20 分):服务器 $A$ 和 $B$($A < B$)直接相连,当且仅当 $2A = B$ 或 $2A + 1 = B$。
  • 子任务 5(25 分):任何服务器最多与 5 个其他服务器直接相连。
  • 子任务 6(35 分):无附加限制。

此外,以下规则适用:在每个子任务中,如果你解决了所有从不查询“有多少服务器存储了某个数据块”(即没有输入行以 C 开头)的测试用例,你将获得该子任务 50% 的分数。在 CMS 系统中,这显示为相应子任务的“Group 1”。

注:在 QOJ 中,每个子任务的测试组被拆分为独立的子任务。也就是说,总共有 13 个子任务(子任务 #1 为样例),其中偶数编号的子任务对应那些没有输入行以 C 开头的测试。

样例

样例输入 1

6 9
S 1 2
S 1 3
S 3 4
Q 5 1
S 4 5
S 1 6
Q 5 1
Q 1 5
C 1
C 2
C 3
C 4
C 5
C 6

样例输出 1

no
yes
no
6
6
5
3
2
2

样例输入 2

4 4
S 1 2
S 1 3
S 3 4
Q 2 1
Q 2 2
Q 2 3
Q 2 4

样例输出 2

yes
yes
no
no
  • 确实如此,我们知道,你的团队领导也知道,但没关系。

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.