并查集被评为历史上最经典的算法。其形式很简单,但是可以对数据进行很高效的处理。并查集的主要功能为1)合并两个不相交的几何2)查找元素是否在同一个集合中。
并查集为简单的树形结构,没一个节点指向它的父节点,根节点指向它自己。我们可以用一个数组father[]来表示元素的父子关系,用一个数组count[]来表示每一个节点所在集合的元素个数。
并查集可以提供几个操作1)获取一个节点所在集合的根节点2)判断2个元素是否在一个集合3)合并2个不相交的集合。
并查集在1操作中可以结合路径压缩,提高并查集的查找性能
zoj2833
并查集为简单的树形结构,没一个节点指向它的父节点,根节点指向它自己。我们可以用一个数组father[]来表示元素的父子关系,用一个数组count[]来表示每一个节点所在集合的元素个数。
并查集可以提供几个操作1)获取一个节点所在集合的根节点2)判断2个元素是否在一个集合3)合并2个不相交的集合。
并查集在1操作中可以结合路径压缩,提高并查集的查找性能
zoj2833
#include<iostream> #include<stdio.h> using namespace std; class union_find_set { public: int anc; int father[100001]; int count[100001]; union_find_set() { for(int i=0;i<100001;i++) { this->father[i]=i; this->count[i]=1; } } int getFather(int v) { if(father[v]==v) { return v; } else { return father[v]=getFather(father[v]); } } bool same(int x,int y) { return (getFather(x)==getFather(y)); } bool judge(int x,int y) { int fx,fy; fx=getFather(x); fy=getFather(y); if(fx==fy) return false; else { father[fx]=fy; count[fy]+=count[fx]; return true; } } void init(int max) { for(int i=0;i<=max;i++) { this->father[i]=i; this->count[i]=1; } } }; //int father[100001]; //int member_num[100001]; int n,m; char flag; int m1,m2; int q; int i; /* int getFather(int v) { if(father[v]==v) { return v; } else { return father[v]=getFather(father[v]); } } bool same(int x,int y) { return (getFather(x)==getFather(y)); } bool judge(int x,int y) { int fx,fy; fx=getFather(x); fy=getFather(y); if(fx==fy) return false; else { father[fx]=fy; member_num[fy]+=member_num[fx]; return true; } } void init(int max) { for(int i=0;i<=max;i++) { father[i]=i; member_num[i]=1; } } */ int main() { union_find_set ufset; int num; num=0; while(scanf("%d%d",&n,&m)!=EOF) { if(num>=1) printf("\n"); printf("Case %d:\n",++num); ufset.init(n); /*for(i=0;i<=n;i++) { father[i]=i; member_num[i]=1; }*/ while(m--) { getchar(); scanf("%c",&flag); getchar(); if(flag=='M') { scanf("%d %d",&m1,&m2); if(!ufset.same(m1,m2)) ufset.judge(m1,m2); } if(flag=='Q') { scanf("%d",&q); printf("%d\n",ufset.count[ufset.getFather(q)]); } } } return 0; }
发表评论
-
图的割点tarjan---zoj_1119
2011-10-24 23:00 1260http://acm.zju.edu.cn/on ... -
BFS与双向BFS---zoj_1505
2011-10-09 17:14 1676http://acm.zju.edu.c ... -
静态treap+线段树---zoj_2112
2011-09-29 23:06 1734http://acm.zju.edu ... -
NIM博弈游戏,SG函数---zoj_3084,zoj_2083
2011-09-23 23:00 1340Nim游戏是两个人进行的游戏有如下规则: ... -
多重背包--zoj_2156
2011-09-14 11:10 893首先介绍经典的三种背包问题,0-1背包,完全 ... -
模式串匹配---KMP
2011-08-31 20:49 1307朴素的的模式串匹配算法通常要在向前移动文本指针 ... -
八数码问题(A*&&双向BFS)---zoj_1217
2011-08-30 22:13 1702题目地址:http://acm.zju.edu.cn/onli ... -
ac自动机以及它上面的DFA
2011-08-08 23:04 2527AC自动机(Aho-Corasick)主要用 ... -
二分图最大匹配(匈牙利算法)--zoj1516,1525,2223
2011-07-20 22:36 1209二分图G(E,V)将点集合V分成两个部分L,R ... -
网络最大流(EK)---zoj_1734
2011-07-19 16:34 2179网络最大流是图论中的一个典型问题,为了精确的定 ... -
trie和前缀检查---zoj_2876
2011-07-13 23:03 890trie树是一种多叉树,广泛用于字典检索。如 ... -
位图bitmap
2011-07-13 21:08 948bitmap是一种广泛使用的数据结构,主要用在 ... -
LAC和RMQ的转化---zoj_3195
2011-07-12 22:35 1103我擦。。纠结了好久啊,从SF到TLE,先总结2 ... -
LAC的tarjan(离线)算法---zoj_1141
2011-07-08 17:52 1690LCA就不解释了,这里主要再次复习一下LC ... -
笛卡尔树以及treap---zoj_2243
2011-07-07 15:52 2886zoj_2243笛卡 ... -
线段染色,矩形切割,离散化---zoj_2301,zoj_1128
2011-06-24 22:32 1409染色问题:在一维坐标轴上(最右端为M),有N ... -
线段树---zoj_1610
2011-06-22 21:06 786线段树是一种二叉树的拓展,在线段树每个节点中 ... -
快速排序(qsort)
2011-06-16 17:03 799快速排序是一种高效的非稳定排序,它的基本思路 ... -
斐波那契散列
2011-06-16 16:38 3108斐波那契散列法其实是一种特殊的乘法散列,先来看乘法 ... -
强连通分支(scc)---tarjan
2011-06-15 16:17 1311本文大量 ...
相关推荐
标题中的"ZOJ.gz_ ZOJ_ZOJ 1016_max flow_zoj 1045_zoj.rar" 提到了两个ZOJ(Zhejiang Online Judge)的题目,分别是1016和1045,这两个数字通常代表在线编程竞赛中的题目编号。这些题目通常涉及到算法和数据结构的...
最近在acm.zju.edu.cn上通过的题目的代码,都是比较有价值的题目
【标题】"ZOJ-CPP.zip" 是一个包含ZOJ(在线判题系统ZeroJudge)网站上多个C++编程练习解答的压缩包。这个压缩包的名称表明它专注于C++语言,很可能是一个学习资源,旨在帮助初学者理解和解决动态规划问题。 【描述...
【标题】"zoj.rar_ zoj Deck java_oj_zoj_zoj.rar_在线评测" 提供的是 ZoJ(Zhejiang Online Judge)在线评测系统的源代码,这是一个用于编程竞赛和教育训练的在线判题平台。"Deck"可能指的是系统中的组件或功能模块...
【ZOJ.zip】是一个压缩包,里面包含了与ZOJ(Zhejiang Online Judge)相关的ACM(International Collegiate Programming Contest)题解。ZOJ是一个在线编程竞赛平台,它为参赛者提供了一系列算法题目进行练习,以...
标题中的"ZOJ1055-Oh_Those_Achin_Feet.rar"是指ZOJ(Zhejiang Online Judge)平台上的一道编程题目,编号为1055,题目名为"Oh, Those Achin Feet"。这是一道与图论相关的算法问题,主要涉及的是BFS(Breadth First ...
标题“ZOJ1014.zip_zoj code_zoj1004”表明这是一个与ZOJ(ZeroJudge)在线判题系统相关的代码压缩包,其中可能包含了解决ZOJ问题1004的源代码。ZOJ是面向编程爱好者和学生的一个在线编程竞赛平台,它提供了各种算法...
本篇文章将深入探讨ZOJ 4041的正确解法,并对提供的源代码进行详细的分析。 ZOJ 4041是一道编程题目,其具体内容可能涉及算法设计、数据结构运用以及逻辑推理等多个方面。通常,这类题目旨在测试参赛者在有限时间内...
【标题】"ZOJ 1002" 是一个在线编程竞赛题目,源自ZOJ(Zhejiang Online Judge),这是一个面向ACM/ICPC(国际大学生程序设计竞赛)的在线评测系统。题目编号1002,通常表示该题是ZOJ平台上的一个问题,可能涉及算法...
总的来说,这份“acm.tar.gz”压缩包中的“acm.chm”文件是一份宝贵的教育资源,它以源码形式展示了各类题目的解题思路,有助于学习者系统地掌握编程竞赛中的关键知识点,并通过实战提升编程技能。无论是准备ACM...
【标题】"zoj.zip_zoj"所对应的资源是一个与ZOJ(Zhejiang Online Judge)相关的代码集合。ZOJ是浙江大学主办的一个在线编程竞赛平台,它提供了多种算法题目供用户练习和提交代码进行评测。这个压缩包很可能包含了在...
标题中的"zoj1204.rar_acm 1204_zoj1204"指的是浙江大学在线判题系统ZOJ(Zhejiang University Online Judge)上的第1204题,这是一个针对ACM/ICPC(国际大学生程序设计竞赛)训练的问题。在ACM/ICPC中,参赛者需要...
ZOJ是浙江大学主办的一个在线编程平台,它允许参赛者提交代码并在线运行,以解决各种算法问题。这些题目旨在测试参赛者的编程技能、逻辑思维和算法理解能力。 在描述中提到的"水题",在编程竞赛中通常指的是相对...
标题 "zoj2536.rar_zoj25" 暗示这是一份与ZOJ(中国大学在线编程竞赛)第2536号问题相关的提交文件,可能包含了参赛者或教练的代码解决方案。描述中的“这个不是用贪心做的”表明该问题可能涉及到一种非贪心算法的...
【标题】"zoj3607.rar_zoj贪心" 涉及的是ZOJ(Zhejiang Online Judge)在线编程竞赛平台上的一个问题,该问题编号为3607,且与贪心算法相关。这通常意味着我们需要解决一个通过贪心策略可以优化的计算问题。贪心算法...
通过对"zheda.rar_zoj"中的代码进行学习和分析,我们可以巩固编程基础,熟悉算法应用,并逐步提升解决实际问题的能力。这是一个从基础到进阶,从理论到实践的学习过程。对于想要在计算机领域深入发展的学习者来说,...
zoj_1004.cpp 求单词字母进出栈后能形成目标串的进出方案 广度优先搜索求解
能AC 通过的c++代码,包括zoj1002,1091,1789
标题“zoj1383_zoj1383_”和描述中的“一个非常非常非常非常实用的zoj结题代码”暗示我们这可能是一个关于ZOJ(在线判题系统Zhejiang Online Judge)的编程挑战解决方案。ZOJ是一个为编程爱好者提供在线编程练习和...
ZOJ(Zhejiang Online Judge)是一个著名的在线编程竞赛平台,尤其在ACM(国际大学生程序设计竞赛)领域中有着广泛的影响力。这个“ZOJ题解集合-截至2835”显然是一份包含了大量ZOJ题目解决方案的压缩包,其中涵盖了...