package dagro

import gosort 

func crossCount( *Graph,  [][]string) float64 {
	 := 0.0
	for  := 1;  < len(); ++ {
		 += twoLayerCrossCount(, [-1], [])
	}
	return 
}

type southEntry struct {
	pos    int
	weight float64
}

func twoLayerCrossCount( *Graph, ,  []string) float64 {
	 := make(map[string]int, len())
	for ,  := range  {
		[] = 
	}

	 := make([]southEntry, 0)
	for ,  := range  {
		 := make([]southEntry, 0, len(.OutEdges()))
		for ,  := range .OutEdges() {
			 = append(, southEntry{
				pos:    [.W],
				weight: num(asAttrs(.Edge()), "weight"),
			})
		}
		gosort.SliceStable(, func(,  int) bool { return [].pos < [].pos })
		 = append(, ...)
	}

	 := 1
	for  < len() {
		 <<= 1
	}
	 := 2* - 1
	--
	 := make([]float64, )

	 := 0.0
	for ,  := range  {
		 := .pos + 
		[] += .weight
		 := 0.0
		for  > 0 {
			if %2 != 0 {
				 += [+1]
			}
			 = ( - 1) >> 1
			[] += .weight
		}
		 += .weight * 
	}

	return 
}