#P1417. True Liars
True Liars
题目描述
在乘坐小船漂流了几天后,前田明·克鲁索终于被冲上了一座雾气弥漫的岛屿。尽管他筋疲力尽、陷入绝望,但幸运的是,他想起了小时候从族长那里听到的关于雾岛的传说。这里一定就是传说中的那座岛。传说中,岛上居住着两个部落,一个是神圣的,另一个是邪恶的。一旦神圣部落的成员祝福你,你的未来就会光明而充满希望,灵魂终将升入天堂;相反,一旦邪恶部落的成员诅咒你,你的未来就会黯淡无望,灵魂终将坠入地狱。
为了避免最坏的情况发生,明必须区分邪恶部落和神圣部落。但如何区分呢?他们的外表一模一样,仅凭外貌无法分辨。不过,他还有最后的希望。神圣部落的成员是说真话的人,即他们总是说真话;而邪恶部落的成员是说谎者,即他们总是撒谎。
他询问了其中一些人关于其他人是否属于神圣部落的问题。他们彼此非常了解,并根据各自的特性(即总是说真话或总是撒谎)“忠实”地回答了他的问题。他不敢问其他形式的问题,因为传说中说,邪恶部落的成员如果不喜欢问题,就会永远诅咒提问者。他还有另一条有用的信息:传说中记载了两个部落的人口数量。这些数字是可信的,因为岛上的居民都是永生的,至少几千年来没有人出生过。
你是一名优秀的程序员,因此被请求编写一个程序,根据居民对明的问题的回答对他们进行分类。
输入
输入包含多个数据集,每个数据集的格式如下:
...
...
第一行包含三个非负整数 、 和 。 是明提出的问题数量, 和 分别是传说中神圣部落和邪恶部落的人口数量。接下来的 行中,每行包含两个整数 、 和一个单词 。 和 是居民的编号,范围在 到 之间(包括 和 )。 是“yes”或“no”:“yes”表示居民 说居民 属于神圣部落,“no”则表示相反。注意, 和 可能相同,因为“你属于神圣部落吗?”是一个有效的问题。另外,由于明非常焦虑,可能会多次向同一个人提出相同的问题,因此可能存在两行的 和 相同的情况。
你可以假设 小于 , 和 小于 。一行三个 (即 )表示输入结束。每个数据集都是一致的,不包含矛盾的回答。
输出
对于每个数据集,如果包含足够的信息可以分类所有居民,则按升序输出所有神圣部落成员的编号,每行一个。最后另起一行输出“end”。否则,如果数据集提供的信息不足以确定所有神圣部落成员,则输出一行“no”。
输入数据 1
2 1 1
1 2 no
2 1 no
3 2 1
1 1 yes
2 2 yes
3 3 yes
2 2 1
1 2 yes
2 3 no
5 4 3
1 2 yes
1 3 no
4 5 yes
5 6 yes
6 7 no
0 0 0
输出数据 1
no
no
1
2
end
3
4
5
6
end
来源
Japan 2002 Kanazawa