zoukankan      html  css  js  c++  java
  • 【HDU1231】How Many Tables(并查集基础题)

    什么也不用说,并查集裸题,直接盲敲即可。

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <cstdio>
     5 #include <cctype>
     6 #include <cmath>
     7 #include <algorithm>
     8 #include <numeric>
     9 using namespace std;
    10 
    11 int father[1005];
    12 
    13 int getFather (int x) {
    14     if (x != father[x]) {
    15         father[x] = getFather(father[x]);
    16     }
    17     return father[x];
    18 }
    19 
    20 void Union (int p, int q) {
    21     int x = getFather (p);
    22     int y = getFather (q);
    23     if (x != y) {
    24         father[y] = x;
    25     }
    26 }
    27 
    28 void Init (int n) {
    29     for (int i = 1 ; i <= n; ++ i) {
    30         father[i] = i;
    31     }
    32 }
    33 
    34 int main () {
    35     int T; cin >> T;
    36     while (T --) {
    37         int n, op_n;
    38         cin >> n >> op_n;
    39         Init(n);
    40         for (int i = 0 ; i < op_n; ++ i) {
    41             int x, y; cin >> x >> y;
    42             Union(x, y);
    43         }
    44         int cnt = 0;
    45         for (int i = 1; i <= n; ++ i) {
    46             if (father[i] == i) {
    47                 cnt ++;
    48             }
    49         }
    50         cout << cnt << endl;
    51     }
    52     return 0;
    53 }
     1 import java.util.*;
     2 import java.io.*;
     3 import java.math.*;
     4 
     5 class DisjointSet{
     6     public static int MAXX = 1005;
     7     public int ans = 0;
     8     public int father[] = new int[MAXX];
     9     public int vis[] = new int[MAXX];
    10     
    11     public DisjointSet(){
    12         this.ans = 0;
    13     }
    14     
    15     public int GetAns(){
    16         return ans;
    17     }
    18     public int GetFather(int x){
    19         if(father[x] != 0){
    20             return GetFather(father[x]);
    21         }
    22         else{
    23             return x;
    24         }
    25     }
    26     
    27     public void Union(int x, int y){
    28         int fx = GetFather(x);
    29         int fy = GetFather(y);
    30         if(fx != fy){
    31             father[fy] = fx;
    32             ans++;
    33         }
    34     }
    35 }
    36 
    37 public class Main{
    38     public static void main(String args[]){
    39         Scanner in = new Scanner(System.in);
    40         int l = in.nextInt();
    41         int a, b, n, opn;
    42         for(int i = 0; i < l; i++){
    43             n = in.nextInt();
    44             DisjointSet D = new DisjointSet();
    45             opn = in.nextInt();
    46             for(int j = 0; j < opn; j++){
    47                 a = in.nextInt();
    48                 b = in.nextInt();
    49                 D.Union(a, b);
    50             }
    51             System.out.println(n - D.GetAns());
    52         }
    53     }
    54 }
  • 相关阅读:
    3d max 动作Take 001改名
    Lua代码规范
    Unity Editor 下创建Lua和Text文件
    Unity 5 Stats窗口
    Unity与安卓开发的一些路径知识
    Unity Remote 无法连接
    常见胸肌问题解答(五):下缘不够清晰
    常见胸肌问题解答(四):胸肌块形不够宽
    杠铃卧推:平板、上斜、下斜杠铃卧推动作图解教程
    常见胸肌问题解答(二):上胸不够发达
  • 原文地址:https://www.cnblogs.com/Destiny-Gem/p/3859622.html
Copyright © 2011-2022 走看看