[2016-03-15][HDU][1213][How Many Tables]

Posted 红洋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[2016-03-15][HDU][1213][How Many Tables]相关的知识,希望对你有一定的参考价值。

  • 时间:2016-03-15 16:19:15 星期二

  • 题目编号:[2016-03-15][HDU][1213][How Many Tables]

  • 题目大意:请朋友吃饭,每个朋友都不喜欢和不认识的人在一桌,给出认识的关系,问至少要多少桌

  • 输入:

    • t组数
    • 每组数据
    • n m
    • m行 u v 表示u 和 v 认识
  • 输出:

    • 最少
  • 分析:并查集,求集合的数目

  1. #ifdef _WORK_
  2. #include <vector>
  3. #include <list>
  4. #include <map>
  5. #include <set>
  6. #include <deque>
  7. #include <queue>
  8. #include <stack>
  9. #include <bitset>
  10. #include <algorithm>
  11. #include <functional>
  12. #include <numeric>
  13. #include <utility>
  14. #include <sstream>
  15. #include <iostream>
  16. #include <iomanip>
  17. #include <cstdio>
  18. #include <cmath>
  19. #include <cstdlib>
  20. #include <cctype>
  21. #include <string>
  22. #include <cstring>
  23. #include <cstdio>
  24. #include <cmath>
  25. #include <cstdlib>
  26. #include <ctime>
  27. using namespace std;
  28. typedef long long LL;
  29. #define CLR(x,y) memset((x),(y),sizeof((x)))
  30. #define FOR(x,y,z) for(int (x)=(y);(x)<(z);++(x))
  31. #define FORD(x,y,z) for(int (x)=(y);(x)>=(z);--(x))
  32. const int maxn = 1000 + 100;
  33. int fa[maxn],mrank[maxn];
  34. void ini(int n){
  35. memset(mrank,0,sizeof(mrank));
  36. for(int i = 0; i <= n;++i){
  37. fa[i] = i;
  38. }
  39. }
  40. int fnd(int x){
  41. return x ==fa[x]?x:fa[x] = fnd(fa[x]);
  42. }
  43. void uni(int x,int y){
  44. x = fnd(x);y = fnd(y);
  45. if(x == y) return ;
  46. if(mrank[x] < mrank[y]){
  47. fa[x] = y;
  48. }else {
  49. fa[y] = x;
  50. if(mrank[x] == mrank[y]) ++mrank[x];
  51. }
  52. }
  53. int main(){
  54. //freopen("in.txt","r",stdin);
  55. //freopen("out.txt","w",stdout);
  56. int t;
  57. scanf("%d",&t);
  58. while(t--){
  59. int n,m;
  60. scanf("%d%d",&n,&m);
  61. ini(n);
  62. FOR(i,0,m){
  63. int u,v;
  64. scanf("%d%d",&u,&v);
  65. uni(u,v);
  66. }
  67. int ans = 0;
  68. FOR(i,1,n + 1){ if(fa[i] == i)
  69. ++ans;
  70. }
  71. printf("%d\n",ans);
  72. }
  73. return 0;
  74. }
  75. #endif




以上是关于[2016-03-15][HDU][1213][How Many Tables]的主要内容,如果未能解决你的问题,请参考以下文章

并查集模板hdu-1213

HDU-1213-How Many Tables

HDU1213:How Many Tables(并查集)

HDU 1213(裸并查集)(无变形)

HDU 1213 How Many Tables(模板——并查集)

HDU 1213