美团4.8笔试第二题

import java.util.*;
import java.lang.Math.*;
public class Main 
{   
  static  int res;   
  static  int[] dp = new int[1005];   
  static ArrayList<Integer>[] g = new ArrayList[1005]; 
  public static void main(String[] args) {   
	Scanner sc = new Scanner(System.in);      
	int n = sc.nextInt();      
	for (int i = 1; i <= n; i++) {  
	  g[i] = new ArrayList<>();    
	}       
	for (int i = 1; i < n; i++) { 
	  int x = sc.nextInt();        
	  g[x].add(i+1);          
	  g[i+1].add(x);    
	}      
	int start = sc.nextInt();
	int end = sc.nextInt(); 
	dfs(start,-1);   
	Arrays.fill(dp,0);    
	dfs(end,-1);     
	System.out.println(res); 
  }   
  public static void dfs(int cur, int prev) {    
	res = Math.max(dp[cur],res);  
	for(int v: g[cur]) {  
	  if(v == prev) {     
		continue;    
	  }         
	  dp[v] = dp[cur] + 1;  
	  dfs(v,cur);    
	}    
  }
}
题目描述:
有一棵 n 个节点的树,有一条边被选定。小美想知道对于所有经过这条选定边的所有树上简单路径,最长的那条有多长。一条简单的路径的长度指这条简单路径上的边的个数。



输入描述
第一行一个整数 n,表示树的节点个数。

第二行 n-1 个整数,第 i 个整数 pi 表示节点 i+1 和 pi 之间有一条边相连。

第三行两个整数 x, y,表示这条选定的边。保证这条边一定是树上的一条边。

对于全部数据,2 ≤ n ≤ 1e5, 1 ≤ pi ≤ n, 1 ≤ x, y ≤ n, x ≠ y。保证输入数据正确描述一棵树,并且 (x, y) 是树上的一条边。

输出描述
输出一行,一个整数,表示所有经过选定边的树上简单路径中,最长的那条的长度。


样例输入
7
1 2 3 4 5 3
3 7
样例输出
4
*/
全部评论
您好 这个样例输入真的对嘛...也没有3-7这条边吧,是我语文理解太差了吗,总感觉这个样例输入跟描述完全对不上
1 回复 分享
发布于 2023-04-14 23:04 广东
全职还是实习?有笔经吗?
点赞 回复 分享
发布于 2023-04-13 00:00 四川
投的什么岗?
点赞 回复 分享
发布于 2023-04-17 00:00 山西
通过0
点赞 回复 分享
发布于 2023-05-20 15:46 黑龙江

相关推荐

头像
11-26 15:46
已编辑
中南大学 后端
字节国际 电商后端 24k-35k
点赞 评论 收藏
分享
评论
2
6
分享
牛客网
牛客企业服务