#P17578. PM3517 最小循环

PM3517 最小循环

题目描述

给定一段只保留控制流结构的程序,共有 nn 条语句,编号为 0,1,,n10,1,\ldots,n-1。每条语句只有以下两种形式之一:

IF target1 ELSE target2
RETURN

执行 IF target1 ELSE target2 时,接下来可以执行编号为 target1target2 的语句,两者可以相同。执行 RETURN 时程序结束。

程序总是从语句 00 开始执行,并在到达某条 RETURN 时结束。这样的一整个序列称为一条执行路径

我们希望找到程序中可以被执行的最小循环。一个语句集合 LL 被称为循环,当且仅当满足:

  1. 在任意执行路径中,LL 中至多只有一条语句可以紧接在 LL 外某条语句之后。若存在这样的语句,则称它为循环的入口
  2. 如果 LL 包含语句 00,那么语句 00 必须是该循环的入口;
  3. 对于 LL 中任意一条语句 SS,都存在一条执行路径:从执行 SS 开始,此后在不执行任何 LL 外语句的前提下,能够把 LL 中的每一条语句至少执行一次。

求满足条件的循环所包含的最少语句数。若不存在任何循环,输出 00

输入格式

第一行一个整数 nn,表示语句数量。

接下来 nn 行,每行是一条语句,格式严格为:

IF target1 ELSE target2

RETURN

输出格式

输出一个整数,表示最小循环的语句数;若不存在循环,输出 00

样例 1

输入

2
RETURN
IF 0 ELSE 1

输出

0

样例 2

输入

3
IF 1 ELSE 2
IF 1 ELSE 2
RETURN

输出

1

样例 3

输入

8
IF 1 ELSE 2
IF 3 ELSE 3
IF 4 ELSE 1
IF 4 ELSE 5
RETURN
IF 0 ELSE 6
IF 6 ELSE 6
IF 7 ELSE 2

输出

5

数据范围

  • 1n501\le n\le50
  • 每条 RETURN 中没有空格;
  • 每条 IF 语句恰好含有 33 个空格;
  • target1target2 均无多余前导零;
  • 0target1,target2<n0\le\text{target1},\text{target2}<n