| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 | func findRedundantDirectedConnection(edges [][]int) []int {	n := len(edges)	parent := make([]int, n+1)	rank := make([]int, n+1)	var e1, e2 []int	for _, edge := range edges {		beg, end := edge[0], edge[1]		if parent[end] != 0 { // Has two parents, one of it is invalid.			e1 = []int{parent[end], end}			e2 = []int{beg, end}			edge[0], edge[1] = 0, 0 // Delete the later edge.		}		parent[end] = beg	}	parent = make([]int, n+1) // Clear parent for UF.	for _, edge := range edges {		beg, end := edge[0], edge[1]		if beg == 0 || end == 0 {			continue		}		if parent[beg] == 0 {			parent[beg] = beg		}		if parent[end] == 0 {			parent[end] = end		}		i1, i2 := find(parent, beg), find(parent, end)		if i1 == i2 { // Find loop, e1 or edge is the last of the loop.			if len(e1) == 0 {				return edge			}			return e1		}		if rank[i1] < rank[i2] {			parent[i1] = i2		} else {			parent[i2] = i1			if rank[i1] == rank[i2] {				rank[i1]++			}		}	}	return e2 // Loop not found (after delete e2), so return e2.}func find(parent []int, id int) int {	if parent[id] == id {		return id	}	r := find(parent, parent[id])	parent[id] = r	return r}
 |