您的位置:首页 > 其它

NOI 2001 食物链 解题报告 (并查集)

2016-09-10 16:32 477 查看
在线评测:
http://codevs.cn/problem/1074/
整体思路:

做了关押罪犯和这道题,感觉对并查集有了更深刻的理解,并查集是什么,是用来维护关系的,并没有字面的集合意思那么简单。

这道题我们知道有三种生物,互相吃,那么我们怎么去维护这个关系呢,仔细想想可以发现,我们可以对于每个编号生物3个状态,分别表示他是A,B,C。这里用到一个小技巧,可以只开一个数组,就是x,表示他是a,x+n表示他是b,x+2 *
n表示他是c。我们一定要记住一件事,并查集是用来维护关系的,我们无需确定他是A,B,还是C,只要关系不冲突就行,所以当我们读入两个编号的生物为同一物种时,就把他们的当a,b,c生物的状态都并到一个集合。当两个生物为捕食关系时,我们只要将x,y+n x+n,y+ 2* n x+2n, y并到一个集合就可以了。

当我在处理时,如果发现已经有冲突,判断为假话。

我们可以来看一下,局部代码

失误之处:

当时在处理a吃b的时候只考虑a,b为同一物种时为假话,实际上当b吃a时,这句话同样也是假话~

体会心得:

情况要考虑全面,对于熟悉的算法,要深刻理解其含义。

AC代码:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  NOI2001 并查集