文章分类 -  并查集

摘要:使用并查集的经典案例,未经编译,仅供参考class UnionFind { public: UnionFind(int size) : size_(size) { fathers_.resize(size_ + 1); for (int i = 1; i size_ || b > size_ || a degrees_[father_b]) { fathers_[father_b] = father_a; rels_[father_b] = (rels_[a] - rels_[b] + 2 + rel) % 3; degrees_[father_... 阅读全文
posted @ 2013-08-22 15:40 dmthinker 阅读(111) 评论(0) 推荐(0)
摘要:代码未经编译,仅供参考。lca的tarjan算法很巧妙的运用了并查集,因为这种方法是使用深度优先遍历的方式递归的由下而上的使用并查集(在visit某一节点的同时,把当前节点与子树合并),所以在查找两个点A和B的最近公共祖先的时候,如果A已经visit,在visit B的时候A当前的祖先必定是其最近公共祖先tarjan算法比较适用于同时查找多对节点的最近公共祖先。只需要遍历一遍即可。class UnionFind { public: UnionFind(int size) : size_(size) { fathers_.resize(size_); for (int i = 0;... 阅读全文
posted @ 2013-08-22 15:34 dmthinker 阅读(405) 评论(0) 推荐(0)