Advertisement
EWTD

7

Sep 20th, 2021
350
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1.  
  2.  
  3. package main
  4.  
  5. import (
  6. "fmt"
  7. "github.com/skorobogatov/input"
  8. )
  9. const INF = 2147483647
  10.  
  11. func coprofilling_min( min_e []int) {
  12. for i := 0; i < len(min_e); i++ {min_e[i] = INF}
  13. }
  14. func filling_way(g []Vertex) {
  15. for i := 0; i < len(g); i++ {
  16. g[i].edges = make([]int, len(g))
  17. for j := 0; j < len(g); j++ {
  18. g[i].edges[j] = INF
  19. }
  20. }
  21. }
  22. func ya_ebal_mamy_rombi(a, b int) int {
  23. if a < b {
  24. return a
  25. }else{
  26. return b
  27. }
  28. }
  29. func filling_dick_in_romans_mom_ass(m int, g []Vertex) {
  30. for i := 0; i < m; i++ {
  31. var indexA, indexB, dist int
  32. input.Scanf("%d %d %d", &indexA, &indexB, &dist)
  33. g[indexA].edges[indexB] = dist
  34. g[indexB].edges[indexA] = dist
  35. }
  36. }
  37.  
  38. type Vertex struct {
  39. edges []int
  40. used bool
  41. }
  42. func main() {
  43. var n, m int
  44. input.Scanf("%d \n %d", &n, &m)
  45. graph := make([]Vertex,n)
  46. filling_way(graph)
  47. filling_dick_in_romans_mom_ass(m, graph)
  48. var min_e[]int
  49. min_e = make([]int, n)
  50. coprofilling_min(min_e)
  51. PRIM := func(g []Vertex, min_e []int) int {
  52. min_e[0] = 0
  53. res := 0
  54. for i := 0; i < len(g); i++ {
  55. min1 := INF
  56. var u int
  57. for j := 0; j < len(g); j++ {
  58. if !g[j].used && min_e[j] < min1 {
  59. min1 = min_e[j]
  60. u = j
  61. }
  62. }
  63. res += min1
  64. g[u].used = true
  65. for v := 0; v < len(g); v++ {
  66. min_e[v] = ya_ebal_mamy_rombi(min_e[v],g[u].edges[v])
  67. }
  68. }
  69. return res
  70. }
  71.  
  72. fmt.Println(PRIM(graph,min_e))
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement