4.23 小红书

02

不知道这个正确否

package alibaba;
import java.util.*;

public class Main {
    static int n;
    static int[] vistited = new int[100005];
    static int[] red = new int[100005];
    static int num;
    static List<List<Integer>> allroad = new ArrayList<>(100005);

    static void dfs(int point){
        for(int i=0;i < allroad.get(point).size();i++){
            int temp = allroad.get(point).get(i);
            if(vistited[temp] == 0){
                vistited[temp] = 1;
                num++;
                dfs(temp);
            }
        }
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        String s = sc.next();
        //System.out.println(s);
        List<Integer> ltk = new ArrayList<>();
        for(int i=0;i < s.length();i++){
            if(s.charAt(i) == 'R') {
                red[i + 1] = 1;
            }
        }
        for (int i = 0; i <= n; i++) {
            allroad.add(new ArrayList<Integer>());
        }
        for(int i=0;i < n-1;i++){
            int a = sc.nextInt();
            int b = sc.nextInt();
            if(red[a] == 1 && red[b] == 1){
                allroad.get(a).add(b);
                allroad.get(b).add(a);
            }
        }
        for(int i=0;i <= n;i++){
            if(red[i] == 1 && vistited[i] == 0){
                num = 1;
                vistited[i] = 1;
                dfs(i);
                ltk.add(num);
            }
        }
        Comparator<Integer> ltkCompator = (o1,o2) -> (int) o1 - (int) 02;
        Collections.sort(ltk,ltkCompator.reversed());

        if(ltk.size() < k){
            System.out.println(-1);
        }else{
            System.out.println(ltk.get(k -1));
        }

    }

}

全部评论
一个比较优雅的做法是并查集
点赞 回复
分享
发布于 2023-04-23 22:01 上海
什么岗
点赞 回复
分享
发布于 2023-04-24 16:48 广东
联易融
校招火热招聘中
官网直投
后端JAVA
点赞 回复
分享
发布于 2023-04-24 17:53 甘肃

相关推荐

点赞 评论 收藏
转发
头像
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务