蓝桥杯-国王的烦恼 思路非常简单 想让各位检查一下是否正确

/*输入的第一行包含两个整数n, m,分别表示小岛的个数和桥的数量。
接下来m行,每行三个整数a, b, t,分别表示该座桥连接a号和b号两个小岛,能使用t天。小岛的编号从1开始递增。
数据规模和约定
对于100%的数据,1< =n< =10000,1< =m< =100000,1< =a, b< =n, 1< =t< =100000。*/
//输出一个整数,表示居民们会抗议的天数。
import java.util.Scanner;
public class guowang {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n=in.nextInt(),m=in.nextInt();
int a[][]=new int[n+1][n+1];
int count[]=new int[100000];
int day=2,k=1,sum=0;
while(m>0){
a[in.nextInt()][in.nextInt()]=in.nextInt();
--m;
}
for (int i = 0; i <n+1 ; i++){
for (int j = 0; j < n+1; j++) {
while (a[i][j] >= day) {
count[day++] = 1;
break;
}
}
}
for (int h= 0; h< count.length; h++) {
if (count[h] == 1) {
sum++;
}
}

    System.out.println(sum);
}

}

对于你这个问题可以参考如下链接:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Scanner;

public class Main {
    public static int n, m;
    public static int[] id;
    public static ArrayList<edge> list = new ArrayList<edge>();
    public static HashSet<Integer> set = new HashSet<Integer>();
    
    class MyComparator implements Comparator<edge> {
        public int compare(edge arg0, edge arg1) {
            if(arg0.t > arg1.t)
                return 1;
            else if(arg0.t < arg1.t)
                return -1;
            return 0;
        }
    }
    
    static class edge {
        public int a;
        public int b;
        public int t;
        
        public edge(int a, int b, int t) {
            this.a = a;
            this.b = b;
            this.t = t;
        }
    }
    
    public int find(int a) {
        int root = a;
        while(id[root] >= 0) {
            root = id[root];
        }
        int i = 0, k = a;
        while(k != root) {
            i = id[k];
            id[k] = root;
            k = i;
        }
        return root;
    }
    
    public void union(int a, int b) {
        int rootA = find(a);
        int rootB = find(b);
        if(rootA == rootB)
            return;
        int num = id[rootA] + id[rootB];
        if(id[rootA] < id[rootB]) {
            id[rootB] = rootA;
            id[rootA] = num;
        } else {
            id[rootA] = rootB;
            id[rootB] = num;
        }
    }
    
    public  void kruskal() {
        Collections.sort(list, new MyComparator());
        id = new int[n + 1];
        for(int i = 1;i <= n;i++)
            id[i] = -1;
        int count = 0;
        for(int i = 0;i < list.size();i++) {
            edge p = list.get(i);
            if(find(p.a) != find(p.b)) {
                set.add(p.t);
                union(p.a, p.b);
                count++;
                if(count == n - 1)
                    break;
            }
        }
        System.out.println(set.size());
    }
        
    public static void main(String[] args) {
        Main test = new Main();
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        m = in.nextInt();
        for(int i = 0;i < m;i++) {
            int a = in.nextInt();
            int b = in.nextInt();
            int t = in.nextInt();
            list.add(new edge(a, b, -1 * t));
        }
        test.kruskal();
    }
}


如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img