Advertisement
Ladies_Man

Комп. Связности - Connected Components

Apr 6th, 2014
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.23 KB | None | 0 0
  1. package main
  2.  
  3. import "fmt"
  4. import "os"
  5. //import "github.com/skorobogatov/input"
  6.  
  7. type vertex struct {
  8.         x      int
  9.     depth  int
  10.     parent *vertex
  11. }
  12.  
  13. func MakeSet(x int) *vertex {
  14.     var t vertex
  15.     t.x = x
  16.     t.depth = 0
  17.     t.parent = &t
  18.     return &t
  19. }
  20.  
  21. func Find(x *vertex) *vertex {
  22.     if x.parent == x { return x }
  23.     return Find(x.parent)
  24. }
  25.  
  26. func Union(x, y *vertex) {
  27.     rootx, rooty := Find(x), Find(y)
  28.     if rootx.depth < rooty.depth {
  29.         rootx.parent = rooty
  30.     } else {
  31.         rooty.parent = rootx
  32.         if rootx.depth == rooty.depth && rootx != rooty {
  33.             rootx.depth++
  34.         }
  35.     }
  36. }
  37.  
  38. func get_set(size, k int) [](*vertex) {
  39.     set := make([](*vertex), size)
  40.     for k < size {
  41.         set[k] = MakeSet(k)
  42.         k++
  43.     }
  44.     return set
  45. }
  46.  
  47. func get_edge(set [](*vertex)) (*vertex, *vertex, bool) {
  48.     var u, v int
  49.     input.Scanf("%d %d\n", &u, &v)
  50.    
  51.     su := set[u]
  52.     sv := set[v]
  53.     du := Find(su)
  54.     dv := Find(sv)
  55.    
  56.     if du != dv { return su, sv, false }
  57.     return su, sv, true
  58. }
  59.  
  60. func main() {
  61.     var i, n, m, ks int
  62.     input.Scanf("%d\n", &n)
  63.     input.Scanf("%d\n", &m)
  64.     set := get_set(n, i)
  65.  
  66.     for i < m {
  67.         su, sv, ptr := get_edge(set)
  68.         if Find(su) != Find(sv) && !(ptr) {
  69.             Union(su, sv)
  70.             n--
  71.         }
  72.         i++
  73.     }
  74.     fmt.Printf("%d\n", n)
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement