Advertisement
isbasov

task 9

May 5th, 2024
919
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.38 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "bufio"
  5.     "fmt"
  6.     "math"
  7.     "os"
  8.     "strconv"
  9.     //"github.com/pkg/profile"
  10. )
  11.  
  12. type optic struct {
  13.     From, To int
  14. }
  15.  
  16. func main() {
  17.  
  18.     //defer profile.Start(profile.CPUProfile).Stop()
  19.     in := bufio.NewReader(os.Stdin)
  20.     out := bufio.NewWriter(os.Stdout)
  21.     defer out.Flush()
  22.  
  23.     var t int
  24.     fmt.Fscan(in, &t)
  25.  
  26.     for k := 0; k < t; k++ {
  27.  
  28.         var n, start int
  29.         startVal := math.MaxInt
  30.         fmt.Fscan(in, &n)
  31.         points := make([]int, n)
  32.         for i := 0; i < n; i++ {
  33.             fmt.Fscan(in, &points[i])
  34.             if points[i] < startVal {
  35.                 start = i
  36.                 startVal = points[i]
  37.             }
  38.         }
  39.  
  40.         var m int
  41.         fmt.Fscan(in, &m)
  42.         optics := make(map[optic]int)
  43.         for i := 0; i < m; i++ {
  44.             var from, to, val int
  45.             fmt.Fscan(in, &from, &to, &val)
  46.             optics[optic{from - 1, to - 1}] = val
  47.             optics[optic{to - 1, from - 1}] = val
  48.         }
  49.  
  50.         visits := make(map[int]bool)
  51.  
  52.         l := start
  53.         cost := startVal
  54.         for {
  55.             visits[l] = true
  56.  
  57.             if len(visits) == n {
  58.                 break
  59.             }
  60.  
  61.             min := math.MaxInt
  62.  
  63.             for i := range visits {
  64.                 for j := 0; j < n; j++ {
  65.  
  66.                     if !visits[j] {
  67.                         val := points[j]
  68.                         if v, ok := optics[optic{i, j}]; ok {
  69.                             if v < val {
  70.                                 val = v
  71.                             }
  72.                         }
  73.  
  74.                         if val < min {
  75.                             min, l = val, j
  76.                         }
  77.                     }
  78.                 }
  79.             }
  80.  
  81.             cost += min
  82.         }
  83.  
  84.         out.WriteString(strconv.Itoa(cost))
  85.         out.WriteString("\n")
  86.  
  87.     }
  88. }
  89.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement