`
woxiaoe
  • 浏览: 283552 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

2524 1611 并查集

J# 
阅读更多

http://acm.pku.edu.cn/JudgeOnline/problem?id=2524

http://acm.pku.edu.cn/JudgeOnline/problem?id=1611

code 2524

  1. #include<iostream>
  2. usingnamespacestd;
  3. intpre[50010],num;
  4. intfind(inta);
  5. voidun(inta,intb);
  6. intmain()
  7. {
  8. intn,m;
  9. inti,a,b,T(1);
  10. freopen("in.txt","r",stdin);
  11. while(cin>>n>>m&&n&&m)
  12. {
  13. num=n;//初始化是每个人的信仰都不同
  14. for(i=1;i<=50005;i++)
  15. pre[i]=0;
  16. for(i=1;i<=m;i++)
  17. {
  18. scanf("%d%d",&a,&b);
  19. un(a,b);
  20. }
  21. cout<<"Case"<<T++<<":"<<num<<endl;
  22. }
  23. return0;
  24. }
  25. intfind(inta)//路径压缩
  26. {
  27. intt=a,z;
  28. while(pre[t]!=0)t=pre[t];
  29. while(a!=t)
  30. {
  31. z=pre[a];
  32. pre[a]=t;
  33. a=z;
  34. }
  35. returnt;
  36. }
  37. voidun(inta,intb)
  38. {
  39. //intaa,bb;
  40. intaa,bb;
  41. aa=find(a);
  42. bb=find(b);
  43. if(aa==bb&&aa)//祖先一样的情况
  44. return;
  45. if(aa==0)
  46. pre[bb]=aa;
  47. else
  48. pre[aa]=bb;
  49. num--;
  50. }

code 1611

  1. #include<iostream>
  2. #include<algorithm>
  3. usingnamespacestd;
  4. shortpre[30001],num[30001];
  5. voidun(inta,intb);
  6. intfind(inta);
  7. intmain()
  8. {
  9. intn,i,m,a,j,b,temp;
  10. freopen("in.txt","r",stdin);
  11. while(cin>>n>>m&&m||n)
  12. {
  13. for(i=0;i<30001;i++)
  14. pre[i]=i;
  15. for(i=0;i<m;i++)
  16. {
  17. cin>>a;
  18. for(j=0;j<a;j++)
  19. {
  20. cin>>b;
  21. if(j==0)
  22. temp=b;
  23. un(temp,b);
  24. }
  25. }
  26. for(i=0;i<30001;i++)
  27. find(i);
  28. sort(pre,pre+30001);
  29. n=0,j=0;
  30. while(!pre[n++])j++;
  31. cout<<j<<endl;
  32. }
  33. return0;
  34. }
  35. intfind(inta)//未用路径压缩
  36. {
  37. intt;
  38. t=a;
  39. while(pre[t]!=t)t=pre[t];
  40. pre[a]=t;
  41. returnt;
  42. }
  43. voidun(inta,intb)
  44. {
  45. intaa,bb;
  46. aa=find(a);
  47. bb=find(b);
  48. if(aa==0)
  49. pre[bb]=aa;
  50. else
  51. pre[aa]=bb;
  52. }
分享到:
评论

相关推荐

    数据结构并查集 查询 快速

    数据结构中的并查集(Disjoint Set)是一种用于处理元素集合的分割问题的数据结构,它主要支持两种操作:合并(union)与查找(find)。在实际应用中,尤其是在算法竞赛(ACM)和图论中,它被广泛用于解决快速查询和...

    并查集 团伙数据

    并查集是一种在图论和算法设计中常用的离散数学结构,主要用于处理一些不相交集合的合并与查询问题。这个压缩包文件“团伙数据”显然包含了一些与并查集算法相关的练习数据和可能的题解,目的是帮助学习者更好地理解...

    并查集模板

    并查集模板并查集模板并查集模板并查集模板并查集模板并查集模板

    并查集讲义并查集知识学习讲解

    并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复...

    并查集算法PKU解题报告

    在本解题报告中,我们将探讨并查集算法在PKU(北京大学)的三道题目:PKU1182、PKU1611和PKU2524中的应用。 首先,我们来理解并查集的基本操作: 1. **初始化**:创建一个集合,每个元素初始时都属于一个独立的集合...

    优化并查集

    并查集是一种在大型无向图中查找元素所属集合的数据结构,它主要应用于不经常进行连接,但频繁查询是否属于同一集合的问题。在并查集中,我们通常关注两个操作:`Find` 和 `Union`。`Find` 操作用于确定元素所属的...

    并查集讲义

    并查集讲义,清楚明白地讲解并查集原理及优化

    并查集.ppt

    C++版并查集的课件,定义,并查集的精髓代码以及路径压缩的内容

    并查集C/C++代码实现

    ### 并查集C/C++代码实现 #### 知识点概述 并查集是一种用于处理元素集合的动态集合问题的数据结构,它支持两种基本的操作:**并**和**查**。并查集的主要用途是判断一个元素是否属于某个集合,并且能够有效地将两...

    并查集基础

    并查集的简介,用法,以及一些例子

    19-并查集.pdf

    并查集是一种特殊的树型数据结构,主要用于处理不交集合并及查询问题。在计算机科学中,很多算法问题可以转化为对一组元素的集合进行操作,而并查集结构能够在这些操作中提供有效率的解决方案。 并查集的核心操作...

    数据结构--并查集(Union-Find Sets)

    并查集(Union-Find Sets)是数据结构中一种用于管理元素集合的高效算法,它主要处理两个操作:连接(union)与查找(find)。在并查集中,元素被分到不同的集合中,每个集合代表一个独立的组件。连接操作将两个元素...

    并查集分类1

    大家尽管下载,并查集专题现在已经上传,尽请期待

    并查集算法思想的算法

    ### 并查集算法思想详解 #### 一、并查集基本概念 并查集是一种数据结构,主要用于处理一些不交集的合并及查询问题,它支持两种操作: 1. **合并**(Union):将两个不同的集合合并成一个集合。 2. **查找**...

    并查集代码

    关于并查集的几道经典题目,希望对大家有所帮助

    并查集_并查集_洛谷_

    并查集是一种在图论和数据结构中常用的算法,主要用于处理一些不相交集合的合并与查询问题。在洛谷这个知名的在线编程平台上有许多关于并查集的例题,这些题目非常适合初学者用来入门并查集的学习。 并查集的主要...

    并查集大纲资料.txt

    并查集是一种用于处理不相交集合合并及查询问题的数学结构,尤其适用于解决图论中的连通性问题。在计算机科学领域,它是一种常用的数据结构,用来高效处理一些特定的算法问题。 1. 并查集基础: 1.1 定义 并查集是...

    并查集实现

    本文件含有并查集的实现,其中 find 和 union 均采用了路径压缩。

    并查集初步(C/C++)教学版V1.1

    很好的并查集学习资料,这是对先前发布的“并查集初步(C/C++)”的Bug进行初步修改,本版本专门用于教学,若想用于自学,请下载“并查集初步(C/C++)学生版V1.1”,谢谢支持!

Global site tag (gtag.js) - Google Analytics