
Union find set
文章平均质量分 81
X-Wyatt
For free 邮箱whitezhangv5@gmail.com
展开
-
POJ 1182
食物链:网上看的别人的加过注释的代码,对于rank的解释很好,就摘录了#includeusing namespace std;const int Max = 50005; int n, pa[Max], rank[Max]; void make_set(){ for(int x = 1; x <= n; x ++){ pa[x] = x;转载 2012-09-20 17:54:08 · 456 阅读 · 0 评论 -
POJ 1703
带关系的并查集,每次都存自己和父节点的关系即可。0表示相同,1表示不同#include #include using namespace std;#define MMAX 100050int p[MMAX];int rank[MMAX];void init() { for(int i = 0; i < MMAX; i++) { p[i] = i; rank[i]原创 2014-04-02 15:37:19 · 603 阅读 · 0 评论 -
POJ 1611
查找某个并查集里元素的个数#include #include using namespace std;#define MMAX 30005int p[MMAX];void init() { for(int i = 0; i < MMAX; i++) { p[i] = -1; }}int find(int x) { int s; for(s = x; p[s]原创 2014-04-02 14:53:36 · 652 阅读 · 0 评论 -
POJ 2492
和食物链类似,需要计算集合之间的关系。这里明确一点即可,就是根节点的初始值是都相同,为0。只要在路径压缩和合并的时候注意即可。#include #include #include using namespace std;#define LLEN 2005int c, g;int p[LLEN], f[LLEN];void init() { for(int i = 0原创 2013-12-18 11:24:19 · 1369 阅读 · 0 评论 -
HDU 1879
最小生成树,不过有些边是已经有的,有些边是没有的。这里有两种算法,一种是如下采用并查集的方式,另一种是将已经有的边的权值置为0,这样再用Prim或者Kruskal算最小生成树的时候就一定会将这条边选入。#include #include #include #include using namespace std;typedef struct Edge { int u,原创 2013-08-07 10:09:23 · 832 阅读 · 0 评论 -
HDU 1598
将边先排序,然后从最小的边开始枚举,当发现需要查找的两个点在一个并查集里面的时候就计算差值,并与min比较。#include #include #include #include using namespace std;#define LLEN 210#define INF 0x3ffffffftypedef struct edge { int u, v; int w;原创 2013-08-03 18:20:56 · 1167 阅读 · 0 评论 -
HDU 2120
用并查集求二维空间区域个数。并查集本身是集合的应用,但是由于每次只告诉你两个点之间有墙,只要当这两个点的父节点是同一个,并且再次有墙时,就把结果加1,因为这个时候肯定就会产生一个区域。#include #include using namespace std;#define LEN 1001int p[LEN];void init() { int i; for(i =原创 2013-01-24 21:38:58 · 740 阅读 · 0 评论 -
HDU 1856
简单题,直接代码了#include #include #include using namespace std;#define LEN 10000002int p[LEN];int len[LEN];void init() { int i; for(i = 1; i < LEN; i++) { p[i] = i; }}int find(int x) { re原创 2012-09-21 16:15:22 · 388 阅读 · 0 评论 -
HDU 2419
我原先的代码,一开始超空间,后来用vector后还是超时了#include #include #include #include using namespace std;#define MMAX 9999999#define LEN 20010//bool map[LEN][LEN];vector map[LEN];int vertex[LEN];int p[LEN]原创 2012-09-21 21:23:12 · 767 阅读 · 0 评论 -
HDU 1213
并查集的复习水题#include #include using namespace std;#define LEN 10000int p[LEN];void init(int n) { int i; for(i = 1; i <= n; i++) { p[i] = i; }}int find(int x) { return p[x] == x ? x : (原创 2012-09-20 15:34:40 · 464 阅读 · 0 评论 -
HDU 1232
并查集水题:#include #include #define LEN 1001int p[LEN];void init(int len) { for(int i = 0; i <= len; i++) { p[i] = i; }}int find(int x) { return p[x] == x ? x : (p[x] = find(p[x]));}in原创 2012-11-26 17:52:22 · 965 阅读 · 0 评论 -
POJ 2236
还是并查集,只要计算一下距离,然后原创 2014-04-03 16:29:39 · 734 阅读 · 0 评论