← Home
For problem statement at 1000-1999/1100-1199/1160-1169/1167/problemC.txt this is a correct solution, but verifier at 1000-1999/1100-1199/1160-1169/1167/verifierC.go ends with All tests passed can you fix the verifier? package main

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

var parent []int
var size []int

func find(i int) int {
	if parent[i] == i {
		return i
	}
	parent[i] = find(parent[i])
	return parent[i]
}

func union(i, j int) {
	rootI := find(i)
	rootJ := find(j)
	if rootI != rootJ {
		if size[rootI] < size[rootJ] {
			rootI, rootJ = rootJ, rootI
		}
		parent[rootJ] = rootI
		size[rootI] += size[rootJ]
	}
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Buffer(make([]byte, 1024*1024), 10*1024*1024)
	scanner.Split(bufio.ScanWords)

	readInt := func() int {
		scanner.Scan()
		res := 0
		for _, v := range scanner.Bytes() {
			res = res*10 + int(v-'0')
		}
		return res
	}

	if !scanner.Scan() {
		return
	}
	n := 0
	for _, v := range scanner.Bytes() {
		n = n*10 + int(v-'0')
	}
	m := readInt()

	parent = make([]int, n+1)
	size = make([]int, n+1)
	for i := 1; i <= n; i++ {
		parent[i] = i
		size[i] = 1
	}

	for i := 0; i < m; i++ {
		k := readInt()
		if k > 0 {
			first := readInt()
			for j := 1; j < k; j++ {
				u := readInt()
				union(first, u)
			}
		}
	}

	out := bufio.NewWriter(os.Stdout)
	for i := 1; i <= n; i++ {
		out.WriteString(strconv.Itoa(size[find(i)]) + " ")
	}
	out.WriteByte('\n')
	out.Flush()
}