关注
BFS:100%
public class Main5 {
static List<Integer>[] edges;
static boolean[] vis;
static int n;
static int[] val;
// 贪心,从最小的节点出发,dfs,且最小节点值只能有1个
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int t = scanner.nextInt();
for (int j = 0; j < t; ++j) {
n = scanner.nextInt();
// 节点编号1-n
edges = new List[n + 1];
vis = new boolean[n + 1];
for (int i = 0; i <= n; i++) {
edges[i] = new ArrayList<>();
}
int[] a = new int[n - 1];
int[] b = new int[n - 1];
for (int i = 0; i < n - 1; i++) {
a[i] = scanner.nextInt();
}
for (int i = 0; i < n - 1; i++) {
b[i] = scanner.nextInt();
}
for (int i = 0; i < n - 1; i++) {
edges[a[i]].add(b[i]);
edges[b[i]].add(a[i]);
}
val = new int[n + 1];
int minVal = Integer.MAX_VALUE;
int minNode = 0;
for (int i = 1; i <= n; i++) {
int x = scanner.nextInt();
if (x < minVal) {
minVal = x;
minNode = i;
}
val[i] = x;
}
Queue<Integer> queue = new LinkedList<>();
queue.offer(minNode);
vis[minNode] = true;
boolean flag = true;
while (!queue.isEmpty() &;&; flag) {
int size = queue.size();
for (int i = 0; i < size; i++) {
int p = queue.poll();
for (int child : edges[p]) {
if (vis[child]) {
continue;
}
if (val[child] <= val[p]) {
flag = false;
break;
}
queue.offer(child);
vis[child] = true;
}
if (!flag) {
break;
}
}
}
System.out.println(flag ? minNode : -1);
}
}
}
查看原帖
1 1
相关推荐
牛客热帖
更多
正在热议
更多
# 我的职场心眼子段位 #
6538次浏览 244人参与
# 生物制药/化工校招攻略 #
45447次浏览 289人参与
# 实习最想跑路的瞬间 #
6490次浏览 63人参与
# 上班到公司第一件事做什么? #
54301次浏览 449人参与
# 你找实习最大的坎坷是什么 #
5774次浏览 70人参与
# 视觉/交互/设计百问百答 #
44765次浏览 433人参与
# 你见过最离谱的招聘要求是什么? #
192540次浏览 1421人参与
# 多益网络工作体验 #
46553次浏览 257人参与
# 硬件人秋招的第一个offer #
74422次浏览 1131人参与
# 工作中的卑微时刻 #
13750次浏览 101人参与
# 我的求职精神状态 #
70398次浏览 866人参与
# 你的房租占工资的比例是多少? #
34688次浏览 515人参与
# 硬件人秋招进展 #
201663次浏览 3552人参与
# 2023毕业生求职有问必答 #
174783次浏览 1617人参与
# lastday知无不言 #
53876次浏览 447人参与
# 打工人的辛酸 #
41028次浏览 425人参与
# 牛友故事会 #
731008次浏览 14564人参与
# 大疆求职进展汇总 #
504308次浏览 3289人参与
# 当你面对裁员会如何? #
265860次浏览 2360人参与
# 打工人的精神状态 #
46619次浏览 822人参与