← Home
 ```go
package main

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

type DSU struct {
	parent []int
}

func NewDSU(n int) *DSU {
	p := make([]int, n)
	for i := 0; i < n; i++ {
		p[i] = i
	}
	return &DSU{parent: p}
}

func (d *DSU) Find(x int) int {
	if d.parent[x] != x {
		d.parent[x] = d.Find(d.parent[x])
	}
	return d.parent[x]
}

func (d *DSU) Union(x, y int) {
	xr := d.Find(x)
	yr := d.Find(y)
	if xr != yr {
		d.parent[yr] = xr
	}
}

func main() {
	r := bufio.NewReader(os.Stdin)
	w := bufio.NewWriter(os.Stdout)
	defer w.Flush()

	var n, k int
	fmt.Fscan(r, &n, &k)

	dsu := NewDSU(n)

	for i := 0; i < k; i++ {
		var x, y int
		fmt.Fscan(r, &x, &y)
		x--
		y--
		dsu.Union(x, y)
	}

	components := make(map[int]struct{})
	for i := 0; i < n; i++ {
		components[dsu.Find(i)] = struct{}{}
	}
	c := len(components)
	
	fmt.Fprintln(w, k-n+c)
}
```