CF2052D.DAG Serialization

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

考虑一个简单的单比特布尔寄存器,支持两种操作:

  • set — 如果寄存器当前值为 false,则将其设置为 true,并返回 true;否则,返回 false。
  • unset — 如果寄存器当前值为 true,则将其设置为 false,并返回 true;否则,返回 false。

寄存器的初始状态为 false。假设有 nn 个操作 opiop_i (1≤i≤n1 \leq i \leq n),其中至多有两个操作返回 true。并且我们给出了操作的部分顺序关系,表示为有向无环图(DAG):有一条边 i→ji \rightarrow j,表示操作 opiop_i 在操作 opjop_j 之前发生。

你的任务是判断是否可以将这些操作按某种线性顺序排列,既满足给定的部分顺序关系,又使得如果按照这个顺序执行操作,得到的结果与题目中给定的结果一致。

输入格式

  • 第一行,一个整数 nn,表示操作的数量 (1≤n≤1051 \leq n \leq 10^5)。
  • 接下来的 nn 行,每行一个操作,格式为 "type result",其中 type 是 "set" 或 "unset",result 是 "true" 或 "false"。题目保证最多只有两个操作的 result 为 "true"。
  • 接下来的第一行,一个整数 mm,表示DAG的边数 (0≤m≤1050 \leq m \leq 10^5)。
  • 接下来的 mm 行,每行描述一条边,格式为两个整数 aa 和 bb,表示有一条从操作 opaop_a 到操作 opbop_b 的边,表示操作 opaop_a 在操作 opbop_b 之前执行。

输出格式

输出一个满足DAG约束并且操作结果符合给定要求的操作线性顺序。如果无法找到这样的顺序,则输出 −1-1。

输入输出样例

  • 输入#1

    5
    set true
    unset true
    set false
    unset false
    unset false
    2
    1 4
    5 2

    输出#1

    5 1 3 2 4
  • 输入#2

    3
    unset true
    unset false
    set true
    0

    输出#2

    2 3 1
  • 输入#3

    2
    unset false
    set true
    1
    2 1

    输出#3

    -1
  • 输入#4

    2
    unset false
    set false
    0

    输出#4

    -1

输入解题思路,AI测评打分。不知道怎么写?

首页