← Home
For problem statement at 1000-1999/1000-1099/1020-1029/1027/problemF.txt this is a correct solution, but verifier at 1000-1999/1000-1099/1020-1029/1027/verifierF.go ends with All tests passed can you fix the verifier? package main

import (
	"fmt"
	"io"
	"os"
	"sort"
)

func main() {
	data, _ := io.ReadAll(os.Stdin)
	pos := 0
	nextInt := func() int {
		for pos < len(data) && data[pos] <= ' ' {
			pos++
		}
		if pos >= len(data) {
			return 0
		}
		res := 0
		for pos < len(data) && data[pos] > ' ' {
			res = res*10 + int(data[pos]-'0')
			pos++
		}
		return res
	}

	n := nextInt()
	if n == 0 {
		return
	}

	a := make([]int, n)
	b := make([]int, n)
	vals := make([]int, 0, 2*n)

	for i := 0; i < n; i++ {
		a[i] = nextInt()
		b[i] = nextInt()
		vals = append(vals, a[i], b[i])
	}

	sort.Ints(vals)
	unique := make([]int, 0, len(vals))
	if len(vals) > 0 {
		unique = append(unique, vals[0])
		for i := 1; i < len(vals); i++ {
			if vals[i] != vals[i-1] {
				unique = append(unique, vals[i])
			}
		}
	}

	m := len(unique)
	parent := make([]int, m)
	V_count := make([]int, m)
	E_count := make([]int, m)
	max1 := make([]int, m)
	max2 := make([]int, m)

	for i := 0; i < m; i++ {
		parent[i] = i
		V_count[i] = 1
		E_count[i] = 0
		max1[i] = unique[i]
		max2[i] = 0
	}

	var find func(int) int
	find = func(i int) int {
		root := i
		for root != parent[root] {
			root = parent[root]
		}
		curr := i
		for curr != root {
			nxt := parent[curr]
			parent[curr] = root
			curr = nxt
		}
		return root
	}

	for i := 0; i < n; i++ {
		u := sort.SearchInts(unique, a[i])
		v := sort.SearchInts(unique, b[i])
		pu := find(u)
		pv := find(v)
		if pu != pv {
			parent[pu] = pv
			V_count[pv] += V_count[pu]
			E_count[pv] += E_count[pu] + 1

			m1, m2 := max1[pv], max2[pv]
			n1, n2 := max1[pu], max2[pu]
			if n1 > m1 {
				m2 = m1
				m1 = n1
				if n2 > m2 {
					m2 = n2
				}
			} else {
				if n1 > m2 {
					m2 = n1
				}
			}
			max1[pv] = m1
			max2[pv] = m2
		} else {
			E_count[pv]++
		}
	}

	ans := 0
	for i := 0; i < m; i++ {
		if parent[i] == i && E_count[i] > 0 {
			if E_count[i] > V_count[i] {
				fmt.Println("-1")
				return
			}
			var cur int
			if E_count[i] == V_count[i] {
				cur = max1[i]
			} else if E_count[i] == V_count[i]-1 {
				cur = max2[i]
			}
			if cur > ans {
				ans = cur
			}
		}
	}

	fmt.Println(ans)
}