种类并查集
种类并查集
一、种类并查集定义
定义:把一个集合中的元素根据他们的不同关系进行分类与合并。朋友的朋友是朋友。敌人的敌人也是朋友。种类并查集做的事情就是:不让两个有敌对关系的人在同一个队伍里面。
二、几个比较板的题目
例题1: [P2024 NOI2001] 食物链
思路:
那么我们的做法是,将
所在集合中所有 的元素都是 的同类 所在集合中所有 的元素都是 的天敌 所在集合中所有 的元素都是 的猎物
1 |
|
例题2:P1525关押罪犯
思路:思路和上一题一样,我们开2倍数组。
1 |
|
例题3:P1892 团伙
思路:同样是开2倍数组,因为朋友的朋友是朋友,敌人的敌人也是朋友。那么如果是朋友,我们直接合并。如果是敌人,我们把敌人的敌人合并起来。比如
1 |
|
例题4:P1955 程序自动分析
思路:首先我们要明确的是:相等关系可以传递,不等关系是不能传递的!所以不能和之前那样单纯的分两种。那该怎么办呢?我们考虑变更维护顺序。如果是相等关系,我们直接合并。如果是不等关系,我们先离线存起来,相等关系处理完了,我们统一处理不等关系。如果两个不等的在同一个集合里面说明不满足。
注意:
1 |
|
三、有一点小trick的题
例题5:P1196 银河英雄传说
思路:有两种操作,一种是讯问,一种是把一个集合和另一个集合拼接。需要注意的是find和merge函数的写法。因为我们还需要维护每个点到头节点的距离,以及每个集合的大小。具体代码里面有写。
1 |
|
- Title: 种类并查集
- Author: Nannan
- Created at : 2023-08-12 22:59:00
- Updated at : 2024-09-30 19:52:52
- Link: https://redefine.ohevan.com/2023/08/12/四(4)、种类并查集/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments