• 蓝桥杯 合根植物 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--;
            }
        }
    }
  • 相关阅读:
    R语言 单变量重命名与删除
    R语言 查看函数源代码
    R语言 for循环之break,next
    ROC & AUC笔记
    rmarkdown教程
    github教程
    logistic regression与SVM
    sql语句,order by
    将权重加载到不同的结构(有一些共同层)
    人脸识别数据集
  • 原文地址:https://www.cnblogs.com/blzm742624643/p/10375445.html
Copyright © 2020-2023  润新知