357. 【23NOIP提高组】三值逻辑 中等
时间限制: 1.0s · 内存限制: 512MB · 通过: 0/0
小 L 今天学习了 Kleene 三值逻辑。 在三值逻辑中,一个变量的值可能为:真($True$,简写作 $T$)、假($False$,简写作$F$)或未确定($Unknown$,简写作 $U$)。 在三值逻辑上也可以定义逻辑运算。由于小 L 学习进度很慢,只掌握了逻辑非运算¬,其运算法则为: $¬T = F, ¬F = T, ¬U = U$ 现在小 L 有 $n$ 个三值逻辑变量 $x_1$, · · · ,$x_n$。小 L 想进行一些有趣的尝试,于是他写下了 $m$ 条语句。语句有以下三种类型,其中 ← 表示赋值:
- $x_i$ ← $v$,其中 $v$ 为 $T$,$F$, $U$ 的一种;
- $x_i$ ← $x_j$;
- $x_i$ ← $¬x_j$。 一开始,小 L 会给这些变量赋初值,然后按顺序运行这 $m$ 条语句。 小 L 希望执行了所有语句后,所有变量的最终值与初值都相等。在此前提下,小 L希望初值中 $Unknown$ 的变量尽可能少。 在本题中,你需要帮助小 L 找到 $Unknown$ 变量个数最少的赋初值方案,使得执行了所有语句后所有变量的最终值和初始值相等。小 L 保证,至少对于本题的所有测试用例,这样的赋初值方案都必然是存在的。
提交代码
C++
请先登录
登录后即可提交代码