import
java.util.ArrayList;
import
java.util.Arrays;
import
java.util.List;
class
GraphNode {
int
node, weight;
public
GraphNode(
int
node,
int
weight)
{
this
.node = node;
this
.weight = weight;
}
}
public
class
GFG {
static
List<List<GraphNode> > adj;
static
long
dfs(
int
node,
int
par)
{
long
max =
0
;
for
(GraphNode ngr : adj.get(node)) {
if
(ngr.node == par)
continue
;
long
score = ngr.weight + dfs(ngr.node, node);
max = Math.max(max, score);
}
return
max;
}
static
List<Long> longDis(
int
n,
List<List<Integer> > edges,
int
q, List<Integer> query)
{
adj =
new
ArrayList<>(n +
1
);
for
(
int
i =
0
; i <= n; i++) {
adj.add(
new
ArrayList<>());
}
for
(List<Integer> e : edges) {
adj.get(e.get(
0
)).add(
new
GraphNode(e.get(
1
), e.get(
2
)));
adj.get(e.get(
1
)).add(
new
GraphNode(e.get(
0
), e.get(
2
)));
}
List<Long> ans =
new
ArrayList<>();
for
(
int
i =
0
; i < q; i++) {
long
sum = dfs(query.get(i), -
1
);
ans.add(sum);
}
return
ans;
}
public
static
void
main(String[] args)
{
int
n =
5
;
List<List<Integer> > edges = Arrays.asList(
Arrays.asList(
1
,
5
,
3
), Arrays.asList(
2
,
5
,
3
),
Arrays.asList(
1
,
4
,
2
), Arrays.asList(
5
,
3
,
2
));
int
q =
4
;
List<Integer> query = Arrays.asList(
1
,
3
,
4
,
5
);
List<Long> ans = longDis(n, edges, q, query);
for
(
long
a : ans) {
System.out.print(a +
" "
);
}
}
}