← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)

	if !scanner.Scan() {
		return
	}
	n, _ := strconv.Atoi(scanner.Text())

	adj := make([][]int, n+1)
	for i := 0; i < n-1; i++ {
		scanner.Scan()
		u, _ := strconv.Atoi(scanner.Text())
		scanner.Scan()
		v, _ := strconv.Atoi(scanner.Text())
		adj[u] = append(adj[u], v)
		adj[v] = append(adj[v], u)
	}

	color := make([]int, n+1)
	for i := range color {
		color[i] = -1
	}

	count := [2]int{0, 0}
	queue := make([]int, 0, n)

	color[1] = 0
	count[0]++
	queue = append(queue, 1)

	head := 0
	for head < len(queue) {
		u := queue[head]
		head++

		for _, v := range adj[u] {
			if color[v] == -1 {
				color[v] = 1 - color[u]
				count[color[v]]++
				queue = append(queue, v)
			}
		}
	}

	minOps := count[0]
	if count[1] < minOps {
		minOps = count[1]
	}

	fmt.Println(minOps - 1)
}
```