| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | 
							- type unionFind struct {
 
- 	id []int
 
- 	sz []int
 
- }
 
- func newUF(k int) (uf unionFind) {
 
- 	uf.id = make([]int, k+1)
 
- 	uf.sz = make([]int, k+1)
 
- 	for i := range uf.id {
 
- 		uf.id[i] = i
 
- 	}
 
- 	return
 
- }
 
- func (uf unionFind) union(x, y int) bool {
 
- 	x, y = uf.find(x), uf.find(y)
 
- 	if x == y {
 
- 		return false
 
- 	}
 
- 	if uf.sz[x] < uf.sz[y] {
 
- 		uf.id[x] = y
 
- 	} else {
 
- 		uf.id[y] = x
 
- 		if uf.sz[x] == uf.sz[y] {
 
- 			uf.sz[x]++
 
- 		}
 
- 	}
 
- 	return true
 
- }
 
- func (uf unionFind) find(x int) int {
 
- 	if uf.id[x] == x {
 
- 		return x
 
- 	}
 
- 	i := uf.find(uf.id[x])
 
- 	uf.id[x] = i
 
- 	return i
 
- }
 
- func findRedundantConnection(edges [][]int) []int {
 
- 	n := len(edges)
 
- 	uf := newUF(n)
 
- 	for _, edge := range edges {
 
- 		if !uf.union(edge[0], edge[1]) {
 
- 			return edge
 
- 		}
 
- 	}
 
- 	return []int{}
 
- }
 
 
  |