大意:
一个岛上有神与恶魔两个种族,神会说真话,恶魔会说假话。已知神与恶魔的个数,但不知道具体个人是属于哪个。
n,x,y
这个人问n次 ,x为神的个数,y为恶魔的个数。
每次的问题为 xi,yi,a 问xi ,yi是否为神? a为yes/no。注意xi,yi可能为同一个人
若最终可得出哪些是神则从小到大输出神的编号,并最终输出end
否则输出no
思路:
经过简单推理可得,只要是说yes,xi,yi为同一个族,no则不为同一个族。
这样通过使用并查集+relation(relation[i]为i与父亲的关系)可得出
但是分为了几个不同的群,判断是否可以拼成神的个数。
使用DP,即背包问题。这里的状态定义为dp[i][j]前i个群中拼成j有几种情况。
若情况惟一则正确,否则no
注意:
/************************************************************************/
/*
提供测试数据:
11 9 7
6 12 no
4 8 yes
3 12 yes
5 9 no
6 11 yes
6 5 no
15 4 yes
16 15 yes
10 3 no
6 16 no
2 6 no
6 2 4
1 1 yes
2 3 yes
3 4 yes
4 5 no
5 6 yes
6 6 yes
3 3 2
1 2 no
3 4 yes
3 5