数据结构--并查集
exmy
Less is more, and more is less.
展开
-
PAT--1118. Birds in Forest(并查集)
1118. Birds in Forest题解裸的并查集#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std;const int maxn = 10000 + 5; const int inf = 0x3f3f3f3f; int p[maxn], tmp[m原创 2016-10-27 23:28:28 · 801 阅读 · 0 评论 -
PAT--1021. Deepest Root(DFS+并查集)
pat 1021题解 判断图是否连通; 找到深度最大的结点,按递增的顺序输出。 #include <iostream> #include <cstdio> #include <vector> #include <queue> #include <cstring> #include <algorithm> using namespace std; const int maxn = 10000 + 10原创 2016-07-18 11:23:54 · 326 阅读 · 0 评论 -
nyoj--129 树的判定(并查集)
nyoj 129题意若干条有向边(u,v)(u, v),判定能否构成一棵有向树。题解构成有向树的条件是: 1. 空树是有向树; 2. 只有一个根节点,除根节点外的每个结点只有一个父节点,也就是只有一个结点入度为0,其他结点入度为1; 3. 不能形成环。可以用并查集检查集合个数,显然一棵树应只有一个集合。 一开始没注意到空树,一直WA,WA,WA,伤得不轻。#include <iostream原创 2016-03-08 17:54:49 · 626 阅读 · 0 评论 -
PAT--1013 Battle Over Cities(并查集)
PAT 1013题意一个无向图,去除一点以及这点邻接的边,输出使余图连通还需的边数。题解并查集高效判断连通性。#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int maxn = 1000 + 5; const int maxe = (maxn + 1) * maxn / 2;原创 2016-02-21 23:26:46 · 436 阅读 · 0 评论 -
并查集
在计算机科学中,并查集是一种树型的数据结构,其保持着用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。有一个联合-查找算法(union-find algorithm)定义了两个操作用于此数据结构: Find:确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集。Union:将两个子集合并成同一个集合 (维基百科) 带路径压缩的 Find: 所原创 2016-01-28 15:18:22 · 544 阅读 · 0 评论 -
PAT--1107. Social Clusters(并查集)
problem link题解并查集,计算集合数以及每个集合的大小。#include <iostream> #include <cstdio> #include <algorithm> #include <vector> #include <map> using namespace std;const int maxn = 1000 + 5; int p[maxn]; int n; int tot;原创 2016-11-20 16:22:50 · 312 阅读 · 0 评论 -
PAT--1114. Family Property(并查集)
problem link题解对每个人的id以及其双亲 和孩子id建立并查集。#include <iostream> #include <cstdio> #include <algorithm> #include <queue> #include <vector> #include <stack> using namespace std;const int maxn = 10005; struct P原创 2016-11-23 17:15:46 · 376 阅读 · 0 评论 -
poj--1703 Find them, Catch them(并查集)
problem link题解对于 D a b,a和b属于不同的帮派,如果a属于帮派A,那么a + n属于帮派B,同理,b也是如此。 因此,并查集中元素的个数是2n,每次合并就是Union(a, b + n) 和 Union(a + n, b) 这实际上是保留了所有的可能性,因为只知道a和b不在同一个集合里,不能确定到底是属于哪个集合。#include <iostream> #include <a原创 2016-11-25 23:32:22 · 360 阅读 · 0 评论