
------并查集
fisty
hi
展开
-
poj1703
#include #include #include using namespace std;class UnionFindTree {public: UnionFindTree(int n) { rank = vector(n, 0); par = vector(n); for (int i = 0; i < n; i++) par[i] = i; }原创 2014-08-05 18:47:09 · 443 阅读 · 0 评论 -
POJ 2236 Wireless Network
本题的关键点在与,给定一个修复好的u,谁是和它连通的呢? 答案需要遍历全部的n,找出存在于并查集里的i,并且 距离(i, u) /*********************************************** * Author: fisty * Created Time: 2015/2/26 15:48:34 * File Name : A.cpp *原创 2015-02-27 18:32:40 · 483 阅读 · 0 评论 -
How Many Answers Are Wrong hdu3038
rank[x] 表示从x结点到根节点的值。首先我们可以把问题稍微转化一下,就是如果已知[3,6],[7,10]俩个区间内各自所有数的和,那么就可以[3,10]内所有数的和,可是,这俩个区间根本就不衔接,所有要稍微处理一下,将左区间值减1,就变成了[2,6],[6,10],这样就方便处理了。具体注释见代码。/**************************************原创 2015-02-27 19:10:38 · 463 阅读 · 0 评论 -
POJ 1611 The Suspects
并查集的同时记录这个集合里面的元素个数。用cnt来表示,初始时cnt[i] = 1;{ 0/*********************************************** * Author: fisty * Created Time: 2015/2/26 19:13:23 * File Name : B.cpp ***************************原创 2015-02-27 18:35:45 · 444 阅读 · 0 评论 -
hdu1272 小希的迷宫
小希希望任意两个房间有且仅有一条路径可以相通这句话的意思是图是连通的,只有一个连通图所以这个题需要用用并查集判断任意两点有一条途径,还有图的连通性判断。1.输入u,v 如果 已经存在find(u) == find(v) ,那么就说明u , v 已经存在一条路径,是No的一种情况2.对于连通图的所有顶点,只有一个顶点的par[i] = i,所有当多个顶点的par[i] = i 就说明这个原创 2015-02-27 19:19:38 · 416 阅读 · 0 评论 -
HDU 1875 畅通工程再续
最后需要判断一下图是否所有顶点都联通。用并查集。全部连通之后必然只有一个i(i 属于n) 满足(find(i) == i) 他就是根。如果出现多个那么图不连通/*********************************************** * Author: fisty * Created Time: 2015/2/28 14:36:42 * File Name :原创 2015-02-28 21:03:22 · 498 阅读 · 0 评论 -
How Many Tables hdu1213
深搜一次。。并查集也可以/*********************************************** * Author: fisty * Created Time: 2015/2/26 19:49:14 * File Name : C.cpp *********************************************** */#include原创 2015-02-27 18:37:08 · 437 阅读 · 0 评论