← Home
For problem statement at 0-999/0-99/50-59/53/problemE.txt this is a correct solution, but verifier at 0-999/0-99/50-59/53/verifierE.go ends with case 3 failed: expected 29 got 2
input:
6 9 2
1 2
2 3
2 4
2 5
3 6
1 5
2 4
3 4
3 6
exit status 1 can you fix the verifier? package main

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

var (
	adj    [11][11]bool
	n, m, k int
	L, D   int
	chosen [11]int
	seq    [11]int
	ans    int
)

func main() {
	in := bufio.NewReader(os.Stdin)
	fmt.Fscan(in, &n, &m, &k)

	for i := 0; i < m; i++ {
		var u, v int
		fmt.Fscan(in, &u, &v)
		adj[u][v] = true
		adj[v][u] = true
	}

	L = n - 2
	D = n - k

	chooseElements(1, 0)

	fmt.Println(ans)
}

func chooseElements(start, count int) {
	if count == D {
		generate(0, 0, 0)
		return
	}
	if n-start+1 < D-count {
		return
	}
	for i := start; i <= n; i++ {
		chosen[count] = i
		chooseElements(i+1, count+1)
	}
}

func generate(idx int, usedMask int, distinctCount int) {
	if L-idx < D-distinctCount {
		return
	}
	if idx == L {
		checkSequence()
		return
	}

	for i := 0; i < D; i++ {
		v := chosen[i]
		newMask := usedMask | (1 << v)
		newCount := distinctCount
		if newMask != usedMask {
			newCount++
		}
		seq[idx] = v
		generate(idx+1, newMask, newCount)
	}
}

func checkSequence() {
	var deg [11]int
	for i := 1; i <= n; i++ {
		deg[i] = 1
	}
	for i := 0; i < L; i++ {
		deg[seq[i]]++
	}

	ptr := 1
	for ptr <= n && deg[ptr] != 1 {
		ptr++
	}
	leaf := ptr

	for i := 0; i < L; i++ {
		v := seq[i]
		if !adj[leaf][v] {
			return
		}
		deg[leaf]--
		deg[v]--

		if v < ptr && deg[v] == 1 {
			leaf = v
		} else {
			ptr++
			for ptr <= n && deg[ptr] != 1 {
				ptr++
			}
			leaf = ptr
		}
	}

	u, v := -1, -1
	for i := 1; i <= n; i++ {
		if deg[i] == 1 {
			if u == -1 {
				u = i
			} else {
				v = i
				break
			}
		}
	}
	if !adj[u][v] {
		return
	}

	ans++
}