在「小慕」的权限管理项目中,所有组织单元(部门)与任务节点(Task)共同构成一棵庞大的项目树。小慕需要设计一套统一的权限管理系统,以管理不同成员在各节点上的权限等级。 你的任务是实现这个系统,并根据输入指令执行相应操作。 一、组织结构说明 系统中存在一个唯一根节点: * 根节点编号为 0。 * 根节点类型为部门。 节点类型说明: * 类型 0 表示部门,允许拥有子节点。 * 类型 1 表示任务节点,不允许拥有任何子节点。 部门可以包含子部门或子任务,但任务节点不能包含任何下级节点。 --- 二、权限规则说明 每位成员在节点上拥有一个权限值: * 权限 0 表示普通成员(Member)。 * 权限 1 表示管理员(Admin)。 权限查询规则如下: 当查询某一节点上的权限时,如果该节点未为该成员设置权限,则向其父节点查询,一直到根节点。若某一设置过该成员的权限,则该权限生效。若所有节点均未设置,则视为不是管理员。 --- 三、可执行指令说明 1. 初始化系统 第一条指令必须是:
OrgPermissionSys系统成功初始化后输出 `null`。 --- 2. 创建节点 create_node 格式如下:
create_node
nodeId
parentId
nodeType行为如下: * 在 `parentId` 下创建编号为 `nodeId` 的新节点。 * `nodeType` 为 0 表示部门,为 1 表示任务。 创建失败情况包括: * `parentId` 不存在; * `parentId` 是任务节点; * `nodeId` 已存在。 输出结果为 `True` 或 `False`。 --- 3. 授予权限 grant_power
grant_power
memberId
nodeId
power含义:将成员 `memberId` 在节点 `nodeId` 的权限设置为 `power`。 若节点不存在,操作失败。 输出 `True` 或 `False`。 --- 4. 查询是否为管理员 is_admin
is_admin
memberId
nodeId若成员在该节点或任意拥有权限 1,则输出 `True`,否则输出 `False`。 --- 5. 查询节点及其 get_projects
get_projects
nodeId行为如下: * 若 `nodeId` 是任务节点,则仅输出其自身编号。 * 若 `nodeId` 是部门,则输出包含其整个中所有节点的编号,按升序输出。
提示:带虚线的词点一下有通俗解释。
输入描述
第一行输入指令数量 Q。 之后逐条输入指令与其参数,每行一个。 第一条必须为 `OrgPermissionSys`。
输出描述
每条指令输出一行结果: * 初始化指令输出 `null`。 * create_node、grant_power、is_archmage 输出 `True` 或 `False`。 * get_projects 输出节点编号列表,使用空格分隔。
示例
示例 1
输入
8 OrgPermissionSys create_node 1 0 0 create_node 2 0 1 grant_power 5 0 1 is_archmage 5 2 get_projects 0 is_archmage 3 1 get_projects 2
输出
null True True True True 0 1 2 False 2
说明:1. 初始化系统 → 输出 `null` 2. 创建节点 1,父节点为 0,类型为学院 → 创建成功 → 输出 `True` 3. 创建节点 2,父节点为 0,类型为课题 → 创建成功 → 输出 `True` 4. 将魔导师 5 在节点 0 设置为大魔导师 → 输出 `True` 5. 查询魔导师 5 是否在节点 2 为大魔导师。由于节点 0 设置过其权限,因此返回 `True` 6. 节点 0 的子树包含节点 0、1、2 → 输出 `0 1 2` 7. 查询魔导师 3 在节点 1 是否为大魔导师 → 未设置过权限 → 输出 `False` 8. 节点 2 是课题 → 只输出自身编号 → 输出 `2`
时间限制 1000 ms · 内存限制 128 MB