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代码:
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年-食物链-并查集-解题报告
- POJ1182 【NOI2001】 食物链 <种类并查集>
- 食物链 并查集 解题报告
- Poj 食物链 解题报告 (种类并查集)
- 【并查集】【向量偏移】[NOI 2001]食物链 eat WikiOI 1074
- <(扩展域/加权)并查集>NOI 2001 食物链
- 【解题报告】 POJ 1182 食物链 并查集的经典应用+相对位置
- noi2001 食物链(并查集)
- 【NOI2001T1】食物链-并查集
- 【NOI2001】 食物链 并查集
- poj 1182 食物链(并查集)解题报告(转)
- poj1182 带权并查集 NOI 2001 食物链(eat) P1531
- NOI 2001食物链(经典并查集)
- NOI 2001 食物链 并查集A的第一题。
- NOI2001 食物链 并查集
- NOI2001 食物链 (并查集处理集合)
- 【带权并查集】POJ1182 [NOI2001]食物链
- codevs 1704 [NOI2001] 食物链 并查集
- poj 1182 食物链(并查集)解题报告(转)
- POJ 2001 解题报告 trie 树