zoukankan      html  css  js  c++  java
  • HDU-1213 How Many Tables

     1 #include <bits/stdc++.h>
     2 #define pb push_back
     3 #define _for(i,a,b) for(int i = (a);i < (b);i ++)
     4 #define INF 0x3f3f3f3f
     5 #define sz size()
     6 
     7 using namespace std;
     8 typedef long long ll;
     9 #define _for(i,a,b) for(int i = (a);i < (b);i ++)
    10 const int maxn = 50003;
    11 int par[maxn]; //父亲 
    12 int high[maxn]; //树的高度
    13 int n;
    14 void init(int n)
    15 {
    16     _for(i,0,n)
    17     {
    18         par[i] = i;
    19         high[i] = 0;
    20     }
    21 } 
    22 
    23 int find(int x)
    24 {
    25     return par[x] == x ? x : par[x] = find(par[x]);
    26 }
    27 
    28 void unite(int x,int y)
    29 {
    30     x = find(x);y = find(y);
    31     if(x==y) return ;
    32     n --;
    33     if(high[x]<high[y])
    34         par[x] = y;
    35     else
    36     {
    37         par[y] = x;
    38         if(high[x]==high[y])
    39             high[x] ++;
    40     }
    41 }
    42 
    43 bool same(int x,int y)
    44 {
    45     return find(x) == find(y); 
    46 }
    47 
    48 
    49 int main()
    50 {
    51     int T; 
    52     scanf("%d",&T);
    53     while(T--)
    54     {
    55         int N,M;
    56         scanf("%d %d",&N,&M);
    57         n = N;
    58         init(N+1);
    59         while(M--)
    60         {
    61             int a,b;
    62             scanf("%d %d",&a,&b);
    63             unite(a,b);
    64         }
    65         cout << n <<endl;
    66     }
    67     return 0;
    68 } 
  • 相关阅读:
    Java中的多线程
    Service组件
    Notification和Notification Manager的使用
    Java网络编程
    Intent组件
    Android 多任务多线程断点下载
    hdu 2045
    hdu 2492
    poj 2785
    湖南省第六届程序设计大赛D(台球碰撞)
  • 原文地址:https://www.cnblogs.com/Asurudo/p/10685243.html
Copyright © 2011-2022 走看看