B4510 [语言月赛 202603] 选课

题目背景

错过比赛可以在入门赛结束后继续参加语言月赛同步赛,【赛后补题】也请从同步赛中进入:https://www.luogu.com.cn/contest/316039

题目描述

小 R 的大学中共有 $n$ 门课程,编号为 $1\sim n$。第 $i$ 门课程有 $k_i$ 门先修课,编号分别为 $a_{i,1},a_{i,2},\cdots,a_{i,k_i}$。 每门课程都有三种可能的状态:未选、通过、挂科。初始时所有课程均为“未选”状态。 小 R 每次可以选择任意多门课程学习,但是必须满足以下条件: - 被选择的每门课程的所有先修课程必须为“通过”状态; - 被选择的每门课程必须为“未选”或“挂科”状态。 在一门课程结束后,若她的考试成绩大于等于 $60$ 分,则该课程状态变成“通过”;否则该课程状态变成“挂科”。 现在依次给出 $m$ 次询问,每次询问给出小 R 选择的所有课程编号以及每门课程的考试成绩。请你先判断她选择的课程是否符合上述两个条件,若符合条件,再更新所选课程的状态。**若她的选择不符合条件,无论输入的考试成绩为何值,都不更新课程状态。** **保证先修课关系不会成环。也就是说,存在一种选课顺序,使得小 R 可以通过所有课程。**

输入格式

第一行两个整数 $n,m$,表示课程数量和询问次数。 接下来 $n$ 行,第 $i+1$ 行的第一个整数 $k_i$ 表示第 $i$ 门课的先修课数量,接下来 $k_i$ 个整数 $a_{i,1},a_{i,2},\cdots,a_{i,k_i}$ 表示第 $i$ 门课的所有先修课编号。 接下来 $m$ 行,每行描述一次询问。第一个整数 $t$ 表示选择的课程数量,接下来 $t$ 个整数 $x_1,x_2,\cdots,x_t$ 表示她选择的课程编号,接下来 $t$ 个整数 $s_1,s_2,\cdots,s_t$ 表示她在对应课程的考试成绩。

输出格式

共 $m$ 行,依次回答所有询问,格式如下: - 若小 R 的选择不符合条件,输出 `Error`。 - 若小 R 的选择符合条件,输出一个长度为 $t$ 的字符串。若第 $j$ 门课程状态变更为“考试已通过”,则第 $j$ 个字符为 `P`,否则第 $j$ 个字符为 `F`。

说明/提示

#### 样例解释 \#1 第一次询问中,课程 $2$ 是选择的课程 $1,3$ 的先修课,且处于“未选”状态,不符合条件一。 第二次询问中,课程 $2$ 的成绩为 $79\ge 60$,状态变成“通过”。 第三次询问中,课程 $1$ 的成绩为 $48 < 60$,状态变成“挂科”,课程 $3$ 的成绩为 $97\ge 60$,状态变成“通过”。 第四次询问中,课程 $1$ 是选择的课程 $4$ 的先修课,且处于“挂科”状态,不符合条件一。 --- #### 样例解释 \#2 第一次询问中,课程 $1$ 的成绩为 $76\ge 60$,状态变成“通过”,课程 $3$ 的成绩为 $48 < 60$,状态变成“挂科”。 第二次询问中,选择的课程 $1$ 状态为“通过”,不符合条件二。 第三次询问中,课程 $3$ 的成绩为 $59 < 60$,状态变成“挂科”。 第四次询问中,课程 $3$ 的成绩为 $80\ge 60$,状态变成“通过”,课程 $4$ 的成绩为 $90\ge 60$,状态变成“通过”。 本样例满足测试点 $3\sim 4$ 的限制。 --- #### 样例解释 \#3 本样例满足测试点 $5\sim 6$ 的限制。 --- #### 数据范围 对于全部数据: - $1\le n,m\le 300$; - $0\le k_i < n$,$1\le a_{i,j}\le n$($1\le i\le n$,$1\le j\le k_i$); - 每次询问满足 $1\le t\le n$,$1\le x_i\le n$,$0\le s_i\le 100$($1\le i\le t$); - 保证同一门课的先修课两两不同,且先修课关系不会成环; - 保证同一次询问中小 R 选的课两两不同。 部分分: - 对于测试点 $1\sim 2$(共 $20$ 分),$n,m\le 10$。 - 对于测试点 $3\sim 4$(共 $20$ 分),$k_i=0$($1\le i\le n$)。 - 对于测试点 $5\sim 6$(共 $20$ 分),每次询问满足 $s_i=100$($1\le i\le t$)。 - 对于测试点 $7\sim 8$(共 $20$ 分),每次询问满足 $t=1$。 - 对于测试点 $9\sim 10$(共 $20$ 分),无特殊限制。