`
plussai
  • 浏览: 90686 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

并查集---zoj_2833

阅读更多
    并查集被评为历史上最经典的算法。其形式很简单,但是可以对数据进行很高效的处理。并查集的主要功能为1)合并两个不相交的几何2)查找元素是否在同一个集合中。
     并查集为简单的树形结构,没一个节点指向它的父节点,根节点指向它自己。我们可以用一个数组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;
}



分享到:
评论

相关推荐

    zoj.gz_ ZOJ_ZOJ 1016_max flow_zoj 1045_zoj.rar

    标题中的"ZOJ.gz_ ZOJ_ZOJ 1016_max flow_zoj 1045_zoj.rar" 提到了两个ZOJ(Zhejiang Online Judge)的题目,分别是1016和1045,这两个数字通常代表在线编程竞赛中的题目编号。这些题目通常涉及到算法和数据结构的...

    zoj_ac.rar_zoj_zoj 1023_zoj 2792_zoj21_zoj2182

    最近在acm.zju.edu.cn上通过的题目的代码,都是比较有价值的题目

    zoj-cpp.zip_zoj

    【标题】"ZOJ-CPP.zip" 是一个包含ZOJ(在线判题系统ZeroJudge)网站上多个C++编程练习解答的压缩包。这个压缩包的名称表明它专注于C++语言,很可能是一个学习资源,旨在帮助初学者理解和解决动态规划问题。 【描述...

    zoj.rar_ zoj Deck java_oj_zoj_zoj.rar_在线评测

    【标题】"zoj.rar_ zoj Deck java_oj_zoj_zoj.rar_在线评测" 提供的是 ZoJ(Zhejiang Online Judge)在线评测系统的源代码,这是一个用于编程竞赛和教育训练的在线判题平台。"Deck"可能指的是系统中的组件或功能模块...

    ZOJ.zip_Jugs A_ZOJ NTA_zoj acm_zoj acm 1216_zoj code

    【ZOJ.zip】是一个压缩包,里面包含了与ZOJ(Zhejiang Online Judge)相关的ACM(International Collegiate Programming Contest)题解。ZOJ是一个在线编程竞赛平台,它为参赛者提供了一系列算法题目进行练习,以...

    ZOJ1055-Oh_Those_Achin_Feet.rar_BFS最短路径_ZOJ1055_bfs求最短路径_zoj

    标题中的"ZOJ1055-Oh_Those_Achin_Feet.rar"是指ZOJ(Zhejiang Online Judge)平台上的一道编程题目,编号为1055,题目名为"Oh, Those Achin Feet"。这是一道与图论相关的算法问题,主要涉及的是BFS(Breadth First ...

    ZOJ1014.zip_zoj code_zoj1004

    标题“ZOJ1014.zip_zoj code_zoj1004”表明这是一个与ZOJ(ZeroJudge)在线判题系统相关的代码压缩包,其中可能包含了解决ZOJ问题1004的源代码。ZOJ是面向编程爱好者和学生的一个在线编程竞赛平台,它提供了各种算法...

    zoj.rar_zoj_zoj4041

    本篇文章将深入探讨ZOJ 4041的正确解法,并对提供的源代码进行详细的分析。 ZOJ 4041是一道编程题目,其具体内容可能涉及算法设计、数据结构运用以及逻辑推理等多个方面。通常,这类题目旨在测试参赛者在有限时间内...

    zoj 1002_zoj1002_

    【标题】"ZOJ 1002" 是一个在线编程竞赛题目,源自ZOJ(Zhejiang Online Judge),这是一个面向ACM/ICPC(国际大学生程序设计竞赛)的在线评测系统。题目编号1002,通常表示该题是ZOJ平台上的一个问题,可能涉及算法...

    acm.tar.gz_zoj_zoj题解_题目分类

    总的来说,这份“acm.tar.gz”压缩包中的“acm.chm”文件是一份宝贵的教育资源,它以源码形式展示了各类题目的解题思路,有助于学习者系统地掌握编程竞赛中的关键知识点,并通过实战提升编程技能。无论是准备ACM...

    zoj.zip_zoj

    【标题】"zoj.zip_zoj"所对应的资源是一个与ZOJ(Zhejiang Online Judge)相关的代码集合。ZOJ是浙江大学主办的一个在线编程竞赛平台,它提供了多种算法题目供用户练习和提交代码进行评测。这个压缩包很可能包含了在...

    zoj1204.rar_acm 1204_zoj1204

    标题中的"zoj1204.rar_acm 1204_zoj1204"指的是浙江大学在线判题系统ZOJ(Zhejiang University Online Judge)上的第1204题,这是一个针对ACM/ICPC(国际大学生程序设计竞赛)训练的问题。在ACM/ICPC中,参赛者需要...

    ZOJ4.16.rar_zoj

    ZOJ是浙江大学主办的一个在线编程平台,它允许参赛者提交代码并在线运行,以解决各种算法问题。这些题目旨在测试参赛者的编程技能、逻辑思维和算法理解能力。 在描述中提到的"水题",在编程竞赛中通常指的是相对...

    zoj2536.rar_zoj25

    标题 "zoj2536.rar_zoj25" 暗示这是一份与ZOJ(中国大学在线编程竞赛)第2536号问题相关的提交文件,可能包含了参赛者或教练的代码解决方案。描述中的“这个不是用贪心做的”表明该问题可能涉及到一种非贪心算法的...

    zoj3607.rar_zoj贪心

    【标题】"zoj3607.rar_zoj贪心" 涉及的是ZOJ(Zhejiang Online Judge)在线编程竞赛平台上的一个问题,该问题编号为3607,且与贪心算法相关。这通常意味着我们需要解决一个通过贪心策略可以优化的计算问题。贪心算法...

    zheda.rar_zoj

    通过对"zheda.rar_zoj"中的代码进行学习和分析,我们可以巩固编程基础,熟悉算法应用,并逐步提升解决实际问题的能力。这是一个从基础到进阶,从理论到实践的学习过程。对于想要在计算机领域深入发展的学习者来说,...

    zoj_1004.cpp BFS版本

    zoj_1004.cpp 求单词字母进出栈后能形成目标串的进出方案 广度优先搜索求解

    zoj1002_1091_1789代码

    能AC 通过的c++代码,包括zoj1002,1091,1789

    zoj1383_zoj1383_

    标题“zoj1383_zoj1383_”和描述中的“一个非常非常非常非常实用的zoj结题代码”暗示我们这可能是一个关于ZOJ(在线判题系统Zhejiang Online Judge)的编程挑战解决方案。ZOJ是一个为编程爱好者提供在线编程练习和...

    ZOJ题解集合-截至2835

    ZOJ(Zhejiang Online Judge)是一个著名的在线编程竞赛平台,尤其在ACM(国际大学生程序设计竞赛)领域中有着广泛的影响力。这个“ZOJ题解集合-截至2835”显然是一份包含了大量ZOJ题目解决方案的压缩包,其中涵盖了...

Global site tag (gtag.js) - Google Analytics