#P17578. PM3517 最小循环
PM3517 最小循环
题目描述
给定一段只保留控制流结构的程序,共有 条语句,编号为 。每条语句只有以下两种形式之一:
IF target1 ELSE target2
RETURN
执行 IF target1 ELSE target2 时,接下来可以执行编号为 target1 或 target2 的语句,两者可以相同。执行 RETURN 时程序结束。
程序总是从语句 开始执行,并在到达某条 RETURN 时结束。这样的一整个序列称为一条执行路径。
我们希望找到程序中可以被执行的最小循环。一个语句集合 被称为循环,当且仅当满足:
- 在任意执行路径中, 中至多只有一条语句可以紧接在 外某条语句之后。若存在这样的语句,则称它为循环的入口;
- 如果 包含语句 ,那么语句 必须是该循环的入口;
- 对于 中任意一条语句 ,都存在一条执行路径:从执行 开始,此后在不执行任何 外语句的前提下,能够把 中的每一条语句至少执行一次。
求满足条件的循环所包含的最少语句数。若不存在任何循环,输出 。
输入格式
第一行一个整数 ,表示语句数量。
接下来 行,每行是一条语句,格式严格为:
IF target1 ELSE target2
或
RETURN
输出格式
输出一个整数,表示最小循环的语句数;若不存在循环,输出 。
样例 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
数据范围
- ;
- 每条
RETURN中没有空格; - 每条
IF语句恰好含有 个空格; target1与target2均无多余前导零;- 。