← Home
For problem statement at 1000-1999/1800-1899/1840-1849/1842/problemD.txt this is a correct solution, but verifier at 1000-1999/1800-1899/1840-1849/1842/verifierD.go ends with All 203 tests passed can you fix the verifier? package main

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

type Game struct {
	s string
	t int64
}

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	var n, m int
	if _, err := fmt.Fscan(in, &n, &m); err != nil {
		return
	}

	const INF int64 = 1 << 60

	mat := make([][]int64, n+1)
	for i := 0; i <= n; i++ {
		mat[i] = make([]int64, n+1)
		for j := 0; j <= n; j++ {
			if i == j {
				mat[i][j] = 0
			} else {
				mat[i][j] = INF
			}
		}
	}

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

	dist := make([]int64, n+1)
	used := make([]bool, n+1)
	for i := 1; i <= n; i++ {
		dist[i] = INF
	}
	dist[1] = 0

	for it := 0; it < n; it++ {
		u := 0
		for i := 1; i <= n; i++ {
			if !used[i] && (u == 0 || dist[i] < dist[u]) {
				u = i
			}
		}
		if u == 0 || dist[u] == INF {
			break
		}
		used[u] = true
		for v := 1; v <= n; v++ {
			if mat[u][v] != INF && dist[v] > dist[u]+mat[u][v] {
				dist[v] = dist[u] + mat[u][v]
			}
		}
	}

	if dist[n] == INF {
		fmt.Fprintln(out, "inf")
		return
	}

	D := dist[n]
	q := make([]int64, n+1)
	vals := make([]int64, 0, n)
	for i := 1; i <= n; i++ {
		if dist[i] == INF {
			q[i] = 0
		} else if dist[i] > D {
			q[i] = D
		} else {
			q[i] = dist[i]
		}
		vals = append(vals, q[i])
	}

	sort.Slice(vals, func(i, j int) bool { return vals[i] < vals[j] })
	uniq := make([]int64, 0, n)
	for _, v := range vals {
		if len(uniq) == 0 || uniq[len(uniq)-1] != v {
			uniq = append(uniq, v)
		}
	}

	games := make([]Game, 0, len(uniq))
	for i := 1; i < len(uniq); i++ {
		cur := uniq[i]
		prev := uniq[i-1]
		if cur == prev {
			continue
		}
		b := make([]byte, n)
		for j := 1; j <= n; j++ {
			if q[j] < cur {
				b[j-1] = '1'
			} else {
				b[j-1] = '0'
			}
		}
		games = append(games, Game{string(b), cur - prev})
	}

	fmt.Fprintf(out, "%d %d\n", D, len(games))
	for _, g := range games {
		fmt.Fprintf(out, "%s %d\n", g.s, g.t)
	}
}