← Home
For problem statement at 0-999/100-199/160-169/164/problemC.txt this is a correct solution, but verifier at 0-999/100-199/160-169/164/verifierC.go ends with All 100 tests passed can you fix the verifier? ```go
package main

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

const INF int64 = 1e18

type Edge struct {
	to, rev, cap, flow int
	cost               int64
	id                 int
}

type Task struct {
	u, v, c, id int
}

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

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

	tasks := make([]Task, n)
	points := make([]int, 0, 2*n)

	for i := 0; i < n; i++ {
		var s, t, c int
		fmt.Fscan(in, &s, &t, &c)
		tasks[i] = Task{s, s + t, c, i}
		points = append(points, s, s+t)
	}

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

	getIdx := func(val int) int {
		return sort.Search(len(uniq), func(i int) bool { return uniq[i] >= val })
	}

	numNodes := len(uniq)
	if numNodes == 0 {
		return
	}
	
	adj := make([][]Edge, numNodes)

	addEdge := func(u, v, cap, cost, id int) {
		adj[u] = append(adj[u], Edge{v, len(adj[v]), cap, 0, int64(cost), id})
		adj[v] = append(adj[v], Edge{u, len(adj[u]) - 1, 0, 0, int64(-cost), -1})
	}

	for i := 0; i < numNodes-1; i++ {
		addEdge(i, i+1, k, 0, -1)
	}

	for _, t := range tasks {
		u, v := getIdx(t.u), getIdx(t.v)
		if u < v {
			addEdge(u, v, 1, -t.c, t.id)
		}
	}

	source, sink := 0, numNodes-1
	dist := make([]int64, numNodes)
	parent := make([]int, numNodes)
	edgeIdx := make([]int, numNodes)
	inQ := make([]bool, numNodes)

	for i := 0; i < k; i++ {
		for j := range dist {
			dist[j] = INF
		}
		dist[source] = 0
		q := []int{source}
		inQ[source] = true
		head := 0
		
		for head < len(q) {
			u := q[head]
			head++
			inQ[u] = false
			for idx, e := range adj[u] {
				if e.cap > e.flow && dist[e.to] > dist[u]+e.cost {
					dist[e.to] = dist[u] + e.cost
					parent[e.to] = u
					edgeIdx[e.to] = idx
					if !inQ[e.to] {
						q = append(q, e.to)
						inQ[e.to] = true
					}
				}
			}
		}

		if dist[sink] >= 0 {
			break
		}

		curr := sink
		for curr != source {
			p := parent[curr]
			idx := edgeIdx[curr]
			adj[p][idx].flow++
			rev := adj[p][idx].rev
			adj[curr][rev].flow--
			curr = p
		}
	}

	ans := make([]int, n)
	for u := 0; u < numNodes; u++ {
		for _, e := range adj[u] {
			if e.id != -1 && e.flow == 1 {
				ans[e.id] = 1
			}
		}
	}

	for i := 0; i < n; i++ {
		if i > 0 {
			fmt.Fprint(out, " ")
		}
		fmt.Fprint(out, ans[i])
	}
	fmt.Fprintln(out)
}
```