zoukankan      html  css  js  c++  java
  • 蓝桥杯 合根植物 JAVA

    思路:使用并查集,首先格子中的每个数都以自己为根节点(此时共有m*n个集合),然后根据输入的k个数据将其连通(当两个数的根节点不一样,则说明可以连通,否则说明已在一个集合中),每次连通将集合数减1。

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    /*
     * 并查集
     */
    public class 合根植物 {
        static int m, n, k;
        static int[] id;
        static int count;
        static int[][] data;
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            m = sc.nextInt();
            n = sc.nextInt();
            k = sc.nextInt(); // 接来下k行数据
            
            id = new int[m*n+1];
            count = m*n;
            
            data = new int[k][2];
            
            for(int i=0;i<k;i++){
                int x = sc.nextInt();
                int y = sc.nextInt();
                data[i][0] = x;
                data[i][1] = y;
            }
            
            //初始化数组
            for(int i=1;i<id.length;i++){
                id[i] = i;
            }
            
            for(int i=0;i<data.length;i++){
                union(data[i][0],data[i][1]);
            }
            System.out.println(count);
        }
        
        //找到p的根
        public static int find(int p){
            while(p!=id[p])
                p = id[p];
            return p;
        }
    
        public static void union(int i,int j){
            int iRoot = find(i);
            int jRoot = find(j);
            if(iRoot==jRoot){
                return;
            }else{
                //id[iRoot] = jRoot;
                id[jRoot] = iRoot;
                count--;
            }
        }
    }
  • 相关阅读:
    docker
    Flask
    JavaScirpt
    记录片- 走进肯德基 :十亿美元鸡肉店(2015)
    法正(3):扫黑
    法正(2):法雄
    法正(1):年表
    三国皇帝的寡妇秘史(2)
    三国皇帝的寡妇秘史(1)
    程序员的人性思考(下)
  • 原文地址:https://www.cnblogs.com/blzm742624643/p/10375445.html
Copyright © 2011-2022 走看看