@@ -329,6 +329,50 @@ function findTheCity(n: number, edges: number[][], distanceThreshold: number): n
329
329
}
330
330
```
331
331
332
+ #### JavaScript
333
+
334
+ ``` js
335
+ function findTheCity (n , edges , distanceThreshold ) {
336
+ const g = Array .from ({ length: n }, () => Array (n).fill (Infinity ));
337
+ const dist = Array (n).fill (Infinity );
338
+ const vis = Array (n).fill (false );
339
+ for (const [f , t , w ] of edges) {
340
+ g[f][t] = g[t][f] = w;
341
+ }
342
+
343
+ const dijkstra = u => {
344
+ dist .fill (Infinity );
345
+ vis .fill (false );
346
+ dist[u] = 0 ;
347
+ for (let i = 0 ; i < n; ++ i) {
348
+ let k = - 1 ;
349
+ for (let j = 0 ; j < n; ++ j) {
350
+ if (! vis[j] && (k === - 1 || dist[j] < dist[k])) {
351
+ k = j;
352
+ }
353
+ }
354
+ vis[k] = true ;
355
+ for (let j = 0 ; j < n; ++ j) {
356
+ dist[j] = Math .min (dist[j], dist[k] + g[k][j]);
357
+ }
358
+ }
359
+ return dist .filter (d => d <= distanceThreshold).length ;
360
+ };
361
+
362
+ let ans = n;
363
+ let cnt = Infinity ;
364
+ for (let i = n - 1 ; i >= 0 ; -- i) {
365
+ const t = dijkstra (i);
366
+ if (t < cnt) {
367
+ cnt = t;
368
+ ans = i;
369
+ }
370
+ }
371
+
372
+ return ans;
373
+ }
374
+ ```
375
+
332
376
<!-- tabs: end -->
333
377
334
378
<!-- solution: end -->
@@ -522,6 +566,152 @@ function findTheCity(n: number, edges: number[][], distanceThreshold: number): n
522
566
}
523
567
```
524
568
569
+ #### JavaScript
570
+
571
+ ``` js
572
+ function findTheCity (n , edges , distanceThreshold ) {
573
+ const g = Array .from ({ length: n }, () => Array (n).fill (Infinity ));
574
+ for (const [f , t , w ] of edges) {
575
+ g[f][t] = g[t][f] = w;
576
+ }
577
+ for (let k = 0 ; k < n; ++ k) {
578
+ g[k][k] = 0 ;
579
+ for (let i = 0 ; i < n; ++ i) {
580
+ for (let j = 0 ; j < n; ++ j) {
581
+ g[i][j] = Math .min (g[i][j], g[i][k] + g[k][j]);
582
+ }
583
+ }
584
+ }
585
+
586
+ let ans = n,
587
+ cnt = n + 1 ;
588
+ for (let i = n - 1 ; i >= 0 ; -- i) {
589
+ const t = g[i].filter (x => x <= distanceThreshold).length ;
590
+ if (t < cnt) {
591
+ cnt = t;
592
+ ans = i;
593
+ }
594
+ }
595
+ return ans;
596
+ }
597
+ ```
598
+
599
+ <!-- tabs: end -->
600
+
601
+ <!-- solution: end -->
602
+
603
+ <!-- solution: start -->
604
+
605
+ ### Solution 3
606
+
607
+ <!-- tabs: start -->
608
+
609
+ #### TypeScript
610
+
611
+ ``` ts
612
+ function findTheCity(n : number , edges : number [][], distanceThreshold : number ): number {
613
+ const MAX = Number .POSITIVE_INFINITY;
614
+ const g = Array .from ({ length: n }, () => new Map <number , number >());
615
+ const dist: number [] = Array (n ).fill (MAX );
616
+ const vis: boolean [] = Array (n ).fill (false );
617
+ for (const [f, t, w] of edges ) {
618
+ g [f ].set (t , w );
619
+ g [t ].set (f , w );
620
+ }
621
+
622
+ const dijkstra = (u : number ): number => {
623
+ dist .fill (MAX );
624
+ vis .fill (false );
625
+ dist [u ] = 0 ;
626
+ const pq = new MinPriorityQueue ();
627
+ pq .enqueue (u , 0 );
628
+
629
+ while (! pq .isEmpty ()) {
630
+ const u = pq .dequeue ().element ;
631
+ if (vis [u ]) continue ;
632
+ vis [u ] = true ;
633
+
634
+ for (const [v, w] of g [u ]) {
635
+ if (vis [v ]) continue ;
636
+
637
+ const wNext = dist [u ] + w ;
638
+ if (wNext < dist [v ]) {
639
+ dist [v ] = wNext ;
640
+ pq .enqueue (v , dist [v ]);
641
+ }
642
+ }
643
+ }
644
+
645
+ return dist .filter (d => d <= distanceThreshold ).length ;
646
+ };
647
+
648
+ let ans = n ;
649
+ let cnt = MAX ;
650
+ for (let i = n - 1 ; i >= 0 ; -- i ) {
651
+ const t = dijkstra (i );
652
+ if (t < cnt ) {
653
+ cnt = t ;
654
+ ans = i ;
655
+ }
656
+ }
657
+
658
+ return ans ;
659
+ }
660
+ ```
661
+
662
+ #### JavaScript
663
+
664
+ ``` js
665
+ export function findTheCity (n , edges , distanceThreshold ) {
666
+ const MAX = Number .POSITIVE_INFINITY ;
667
+ const g = Array .from ({ length: n }, () => new Map ());
668
+ const dist = Array (n).fill (MAX );
669
+ const vis = Array (n).fill (false );
670
+ for (const [f , t , w ] of edges) {
671
+ g[f].set (t, w);
672
+ g[t].set (f, w);
673
+ }
674
+
675
+ const dijkstra = u => {
676
+ dist .fill (MAX );
677
+ vis .fill (false );
678
+ dist[u] = 0 ;
679
+ const pq = new MinPriorityQueue ();
680
+ pq .enqueue (u, 0 );
681
+
682
+ while (! pq .isEmpty ()) {
683
+ const u = pq .dequeue ().element ;
684
+ if (vis[u]) continue ;
685
+ vis[u] = true ;
686
+
687
+ for (const [v , w ] of g[u]) {
688
+ if (vis[v]) continue ;
689
+
690
+ const wNext = dist[u] + w;
691
+ if (wNext < dist[v]) {
692
+ dist[v] = wNext;
693
+ pq .enqueue (v, dist[v]);
694
+ }
695
+ }
696
+ }
697
+
698
+ return dist .filter (d => d <= distanceThreshold).length ;
699
+ };
700
+
701
+ let ans = n;
702
+ let cnt = MAX ;
703
+ for (let i = n - 1 ; i >= 0 ; -- i) {
704
+ const t = dijkstra (i);
705
+ if (t < cnt) {
706
+ cnt = t;
707
+ ans = i;
708
+ }
709
+ }
710
+
711
+ return ans;
712
+ }
713
+ ```
714
+
525
715
<!-- tabs: end -->
526
716
527
717
<!-- solution: end -->
0 commit comments