![](https://img-blog.csdnimg.cn/20210127112033810.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构——并查集
并查集
lllllan.
盛意以江河,江河不及你
展开
-
并查集模板
(继续声明,搬自我本人PigySu博客园的文章 模板一:kk给出的有路径压缩的模板 #include<bits/stdc++.h>//万能头文件 using namespace std; const int maxn=1010; int fa[maxn]; void init(){ int n=1000; for(int i=1;i<=n;i++){ fa[i]=i; } }//赋初值 int find(int x){ retu.原创 2020-07-29 09:31:09 · 140 阅读 · 0 评论 -
关于并查集!
并查集详解 (转) 并查集(Union-Find)算法介绍 带权并查集 种类并查集 我的并查集模板 题目 题目 题解 题型 HDU 1272 小希的迷宫 题解 并查集 POJ1611 The Suspects 题解 并查集 CodeForces - 371D Vessels 题解 并查集 HDU 1598 find the most comfortable road 题解 枚举+并查集 POJ1456 Supermarket 题解 贪心+并查集 POJ1182 食物链 题原创 2020-11-18 18:46:46 · 83 阅读 · 0 评论 -
POJ1182 食物链【种类并查集】
食物链 题意: 一个食物链中,只有A吃B,B吃C,C吃A三层关系。给出m对关系判断是否有违背的关系。 #include<algorithm> #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define _for(i, a, b) for(int i = (a); i <= (b); ++i) const int N = 5e4 + ...原创 2020-11-18 18:30:56 · 127 阅读 · 0 评论 -
POJ2492 A Bug‘s Life【种类并查集】
A Bug’s Life 题意: 在m对关系中,不同性别可以在一起,要求判断是否有同性在一起的情况 #include<iostream> #include<algorithm> using namespace std; #define _for(i, a, b) for(int i = (a); i <= (b); ++i) const int N = 2e3 + 10; int _T, tot, n, m; int s[N << 1]; int...原创 2020-11-18 18:28:20 · 88 阅读 · 0 评论 -
HDU 1272 小希的迷宫——并查集
传送门 Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路)。小希现在把她的设计图给你,让你帮忙判断她的设计图是否符合她的设计思路。比如下面的例子,前两个是符合条件的,原创 2020-07-26 23:04:06 · 117 阅读 · 0 评论 -
HDU1878欧拉回路——欧拉回路(并查集)
点这里 题意: 中文题面,直说求欧拉回路,再也不能说英文题看不懂了 题解: 连通性: 并查集。 连通的点用并查集合并,最后判断如果连通区块大于1,则图是不连通的。 欧拉回路: 在连通的基础上,判断是否所有点都是偶点即可。 #include<bits/stdc++.h> using namespace std; const int N = 1e3 + 10; int n, m, a, b; int s[N], deg[N], G[N][N]; int find(int x){ re原创 2020-08-24 10:31:21 · 132 阅读 · 0 评论 -
HDU1811 Rank of Tetris——拓扑排序(BFS+并查集缩点)
点这里 题意: n个人个m个约束条件,每行约束条件都有“<>=”符号,“=”表示两人同级,两个人之间编号大的在前。按照已知条件如果排名唯一,则输出OK;排名不唯一则输出UNCERTAIN;约束条件之间矛盾则输出CONFLICT。 题解: 缩点(并查集)。 不要想 的太复杂 (我就是一直在考虑“=”怎么处理,一直没敢下手) 其实所有=联系的点,合并成一个点处理即可,他们内部的排名肯定是能够确认的,题目不要求输出排名,那就不用在意,看成一个点处理就行。这步处理,则是采用并查集的方式。 CONF原创 2020-08-22 21:38:35 · 115 阅读 · 0 评论 -
HDU1116 Play on Words——欧拉路(有向图+并查集)
点这里 题意: T组输入,每组输入有n个单词,要求将所有单词两两首尾相连,要求是前一个单词的最后一个字母和后一个单词的最后一个字母必须相同。如果能将所有单词连成一串,输出Ordering is possible.否则输出The door cannot be opened. 题解: 看完题目就能知道是一个欧拉路的问题。而欧拉路的判断条件有: 连通性。 用并查集判断即可。 欧拉路。 只有两个点的入度和出度差为1和-1,其他所有点的入度和出度必须相等。 欧拉回路。 所有点的入度和出度均相等。显然欧拉回路也符合原创 2020-08-24 13:10:15 · 269 阅读 · 0 评论 -
HDU 1598 find the most comfortable road【枚举+并查集】
传送门 Problem Description XX星有许多城市,城市之间通过一种奇怪的高速公路SARS(Super Air Roam Structure—超级空中漫游结构)进行交流,每条SARS都对行驶在上面的Flycar限制了固定的Speed,同时XX星人对 Flycar的“舒适度”有特殊要求,即乘坐过程中最高速度与最低速度的差越小乘坐越舒服 ,(理解为SARS的限速要求,flycar必须瞬间提速/降速,痛苦呀 ), 但XX星人对时间却没那么多要求。要你找出一条城市间的最舒适的路径。(SARS是双向的)原创 2020-07-22 22:18:25 · 86 阅读 · 0 评论 -
POJ1611 The Suspects【并查集】
The Suspects 题意: n个人被分为m个小团体,要求输出编号0的人所在团体的总人数。 #include<iostream> #include<algorithm> using namespace std; const int N = 3e4 + 10; int n, m; int s[N], num[N]; void init() { for(int i = 0; i < N; i++) s[i] = i, num[i] = 1;} int fin...原创 2020-10-09 19:46:02 · 65 阅读 · 0 评论 -
CodeForces - 371D Vessels 【并查集】
Vessels 题意: 自上而下的n个碗,向某个碗中倒水,如果溢出,则会流向它之下的下一个未满的碗。有两种操作:1 p x表示往第p个碗中导入x的水,2 p表示询问此时第p个碗中的水量。 题解: 未经思考地暴力走了一发,T在了前八组数据。然后再想,某些连续的的溢出的碗,可以选择合并处理,这个合并,就用到了并查集。 我没想到的是我提交了G++ 17 9.2.0 以后居然RE了,换了老一点的版本又能通过。 #include<bits/stdc++.h> using namespace...原创 2020-10-30 15:41:03 · 109 阅读 · 0 评论 -
POJ1456 Supermarket【贪心 + 并查集】
Supermarket 题意: 有一些商品,必须在规定的时间内卖掉才能获得一定收益,而每天只能卖一件商品。请计算最大收益。 题解: 针对收益最大,自然想到贪心,但是光对商品价值进行贪心可不能得到一个合理的出售安排。——并查集:s[i]表示原本第i天的商品可以在第几天出售。 如果s[x] == x,表示第x天的商品可以选择在第x天出售即可,如果确定当天需要出售某件商品,则对s[x]进行s[x] = find(s[x] - 1)操作,表示之后如果还有截止时间在第x天的商品,我可以询问前一天是否可...原创 2020-11-18 09:18:12 · 132 阅读 · 0 评论