题目链接:1182 -- 食物链
注:poj那题需要用scanf 和printf
题面:
于这篇博客的时候我也不是很清楚种类并查集是什么,我只知道这个可以解决敌人的敌人是朋友的问题
这题将动物分成三个种类(A, B, C),A->B,B->C,C->A,那么就可以分为3个种类:1-n为自身,n+1-2n为食物,2n+1-3n为天敌。
题目让我们求假话的数量。
假话的判定:
- 当前的话与前面的某些真的话冲突,就是假话
- 当前的话中 X 或 Y 比 N 大,就是假话
- 当前的话表示 X 吃 X,就是假话
由此我们很容易的写出a > n || b > n的时候ans++,
if(f == 2 && a == b)ans++;
然后就是冲突问题了:如果a和b的同类,那么a的天敌就不能是b,a的食物也不能是b;