D. JML

内存限制:128 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较

题目描述

Red 姐姐在 OO 公司上班,每个月领着微薄的薪水。这天,公司领导要求他开发一个公司内部的信息管理系统,但是 Red 姐姐懒得写。请你帮帮领导!

员工

在这个系统里,公司的每位员工(老板也是员工)都有在每个时刻独一无二的工号 。除公司老板外,每位员工有且只有一位领导,每个领导可能有一到多个下属,显然一个员工可能同时具备“领导的下属”和“下属的领导”这两个身份。我们指定老板的 为 1。

你的系统需要支持对对员工领导的询问

  • 输入指令格式 queryLeader <id>

    给定员工的工号 ,返回其领导的工号。如果这个员工不存在或这个员工是老板,返回

消息

系统里的每个消息都有对应的 和内容字符串 (不含空格)。

消息的 开始计数,因此系统里新建的第一条消息 ,第二条 ,以此类推。

消息队列

每个员工都有一个接收消息队列。接受消息队列是队列。我们规定队首的消息为第 个消息。

你的系统需要支持对消息队列的查询和修改

  • 查询:输入指令格式 queryMessage <id> <i>

    指定员工工号 ,查询员工的接受消息队列从队头开始的第 个消息。按顺序返回消息的 、内容字符串、发送人 ,每个元素用一个空格分隔;如果员工不存在或消息不存在,返回

  • 修改:输入指令格式 sendMessage <id1> <id2> <message>

    新建一个消息,指定发送人的 和接收人的 和消息内容 。将消息加入接收人的接收消息队列队尾。

    如果 不存在,则发送失败。如果发送成功,则返回 ,否则返回

岗位变动

你的系统需要支持三种岗位变动的方式

  • 员工离职:输入指令格式 depart <id1> <id2>

    指定员工的 ,对应的员工不再是其领导的下属,其下属将成为工号为 的员工的下属。请注意, 有可能被新员工复用。如果 不存在,则返回 ,否则返回

  • 员工入职:输入指令格式 enter <id1> <id2>

    指定新员工的 ,将其变为工号为 的员工的下属。如果 已经存在或 不存在,则返回 ,否则返回

  • 员工岗位变动:输入指令格式 change <id1> <id2>

    指定员工的 ,将其变为工号为 的员工的下属。如果 不存在,则返回 ,否则返回

输入格式

输入共 行:

第一行,一个整数 ,代表初始状态时公司的员工数量;

接下来 行,每行两个整数 ,代表工号为 的员工是工号为 的员工的领导;

行,一个整数 ,代表输入的指令个数;

接下来 行,每行一个指令,保证遵循题目描述中的指令格式。

输出格式

输出共 行:

对输入的 条指令,按照输入顺序执行指令,并依序输出返回值,每条指令的返回值占一行。

样例

【样例输入】

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

【样例输出】

-1
1
https://www.bilibili.com/video/BV1GK421v7zv/

数据范围与提示

指令内容 指令格式 数据范围
查询领导 queryLeader <id>
查询消息 queryMessage <id> <i>
发送消息 sendMessage <id1> <id2> <message> ,消息内容长度满足
员工离职 depart <id1> <id2>
员工入职 enter <id1> <id2>
员工调岗 change <id1> <id2>
测试点编号 特殊条件 分值
1 仅包含 queryLeaderdepartenterchange 指令 20
2 仅包含 queryMessagesendMessage 指令 每个测试点 10
3
4 仅包含 queryLeaderdepartenterchange 指令 每个测试点 20
5 仅包含 queryMessagesendMessage 指令
6 综合测试 20,依赖于测试点 1 ~ 5
1 ~ 6 depart 命令的出现次数不多于 100
7 综合测试 0
所有测试点 100

HINT

请注意内存大小和 message 长度。

通告标题

通告内容

已知晓