4.21小红书笔试第二题

import java.lang.reflect.Array;
import java.util.*;
import  java.io.*;
public class Main 
{    
  static ArrayList<Integer>[] g;  
  static int tmp;  
  static char[] c;  
  static ArrayList<Integer> res = new ArrayList<>(); 
  public static void main(String[] args) { 
	Scanner sc = new Scanner(System.in);    
	int n = sc.nextInt();    
	int k = sc.nextInt();      
	String s = sc.next();         
	c = s.toCharArray();   
	g = new ArrayList[n+1];  
	for(int i = 1; i <= n; i++) {
	  g[i] = new ArrayList<>();  
	}        
	for(int i = 0; i < n - 1; i++) {   
	  int x = sc.nextInt();   
	  int y = sc.nextInt();   
	  g[x].add(y);     
	  g[y].add(x);   
	}       
	for(int i = 1; i <= n; i++) { 
	  if (c[i - 1] == 'R') {     
		tmp = 1;       
		dfs(i, -1);      
		if (tmp != 0) {  
		  res.add(tmp);    
		}           
	  }      
	}         
	Object[] o = res.toArray();  
	Arrays.sort(o);     
	int count = 0;   
	if(res.size() < k) {  
	  System.out.println(-1);    
	}        
	for(int i = res.size() - 1; i >= 0; i--) {  
	  count++;        
	  if(count == k) {     
		System.out.println(o[i]);      
		break;            
	  }       
	}  
  }   
  public static void dfs(int cur, int prev) { 
	c[cur - 1] = 'W';       
	for(int v: g[cur]) {     
	  if(v != prev) {    
		if(c[v-1] == 'R') {  
		  tmp++;         
		  dfs(v,cur);       
		}          
	  }       
	}  
  }
}

来不及做了开会+赶班车,第二个题都没a出来,记录一下、大概是一个求某一颜色的连通子集的点的个数,然后输出倒数第k个,可以用力扣岛屿数量的思路去做。

4 2

RRWR

1 2

2 3

3 4

1

全部评论
uu投的什么岗
点赞 回复 分享
发布于 2023-04-24 18:03 四川
搜推
点赞 回复 分享
发布于 2023-04-24 18:03 江苏
过了吗
点赞 回复 分享
发布于 2023-04-24 18:21 云南

相关推荐

不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
评论
1
3
分享
牛客网
牛客企业服务