[Poi2001]和平委员会 理解

题目链接:https://loj.ac/problem/10097

首先分别在互相厌恶的代表之间连一条边(无向边)。

然后依次枚举每一个党派,若该党派的两名代表都没有参加委员会,则将该党派的一位代表加入委员会。(用 bool 变量 e[i] 来表示第 i 位代表是否加入委员会)

在将该代表加入委员会时,要对它的所有连边进行一遍dfs,若出现矛盾状况(一个党派的两个代表都在委员会内),则试着加入另一个代表,再检查是否有矛盾,若无矛盾,则对下一个党派进行处理,若有矛盾,则直接输出“ NIE ”。(因为一个党派在委员会内必须有且仅有一个代表)

需要注意的是,我们需要给 e 数组设置一个备份,一边在出现上述的矛盾情况时将 e 数组(即委员会的组成代表)返回到先前的状态,并重新选择代表。

总的来说,就是将每个党派枚举一遍,列出选择此代表时的情况,再判断是否出现矛盾。

猜你喜欢

转载自www.cnblogs.com/BruceW/p/11122868.html