1
+ import java .util .ArrayList ;
2
+ import java .util .Arrays ;
3
+ import java .util .HashSet ;
4
+ import java .util .PriorityQueue ;
5
+ class JW_118669 {
6
+ public int [] solution (int n , int [][] paths , int [] gates , int [] summits ) {
7
+ ArrayList <ArrayList <int []>> graph = new ArrayList <>();
8
+ for (int i = 0 ; i < n + 1 ; i ++)
9
+ graph .add (new ArrayList <>());
10
+ for (int [] path : paths ) {
11
+ graph .get (path [0 ]).add (new int [] { path [1 ], path [2 ] });
12
+ graph .get (path [1 ]).add (new int [] { path [0 ], path [2 ] });
13
+ }
14
+
15
+ HashSet <Integer > gateSet = new HashSet <>();
16
+ HashSet <Integer > summitSet = new HashSet <>();
17
+ for (int gate : gates )
18
+ gateSet .add (gate );
19
+ for (int summit : summits )
20
+ summitSet .add (summit );
21
+
22
+ int [] result = { 0 , Integer .MAX_VALUE };
23
+ Arrays .sort (summits );
24
+ for (int summit : summits ) {
25
+ PriorityQueue <int []> pq = new PriorityQueue <>((o1 , o2 ) -> o1 [1 ] - o2 [1 ]);
26
+ boolean [] visited = new boolean [n + 1 ];
27
+ pq .offer (new int [] { summit , 0 });
28
+ while (!pq .isEmpty ()) {
29
+ int [] u = pq .poll ();
30
+ if (gateSet .contains (u [0 ])) {
31
+ if (result [1 ] > u [1 ]) {
32
+ result = new int [] { summit , u [1 ] };
33
+ }
34
+ break ;
35
+ }
36
+ visited [u [0 ]] = true ;
37
+ for (int [] v : graph .get (u [0 ])) {
38
+ if (!visited [v [0 ]] && !summitSet .contains (v [0 ])) {
39
+ pq .offer (new int [] { v [0 ], Math .max (u [1 ], v [1 ]) });
40
+ }
41
+ }
42
+ }
43
+ }
44
+ return result ;
45
+ }
46
+ }
0 commit comments