← Home
package main

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

type FastScanner struct {
	data []byte
	idx  int
	n    int
}

func NewFastScanner() *FastScanner {
	data, _ := io.ReadAll(bufio.NewReaderSize(os.Stdin, 1<<20))
	return &FastScanner{data: data, n: len(data)}
}

func (fs *FastScanner) NextInt() int {
	for fs.idx < fs.n {
		c := fs.data[fs.idx]
		if (c >= '0' && c <= '9') || c == '-' {
			break
		}
		fs.idx++
	}
	sign := 1
	if fs.data[fs.idx] == '-' {
		sign = -1
		fs.idx++
	}
	val := 0
	for fs.idx < fs.n {
		c := fs.data[fs.idx]
		if c < '0' || c > '9' {
			break
		}
		val = val*10 + int(c-'0')
		fs.idx++
	}
	return sign * val
}

func main() {
	fs := NewFastScanner()
	t := fs.NextInt()
	out := make([]byte, 0, 1<<20)

	for ; t > 0; t-- {
		n := fs.NextInt()
		k := fs.NextInt()

		ans := make([]int64, n+1)
		for i := 1; i <= n; i++ {
			ans[i] = int64(fs.NextInt())
		}

		for i := 0; i < k; i++ {
			p := fs.NextInt()
			ans[p] = 0
		}

		adj := make([][]int, n+1)
		indeg := make([]int, n+1)
		hasRecipe := make([]bool, n+1)

		for i := 1; i <= n; i++ {
			m := fs.NextInt()
			if m > 0 {
				hasRecipe[i] = true
				indeg[i] = m
				for j := 0; j < m; j++ {
					e := fs.NextInt()
					adj[e] = append(adj[e], i)
				}
			}
		}

		accum := make([]int64, n+1)
		q := make([]int, 0, n)
		for i := 1; i <= n; i++ {
			if indeg[i] == 0 {
				q = append(q, i)
			}
		}

		for head := 0; head < len(q); head++ {
			u := q[head]
			if hasRecipe[u] && accum[u] < ans[u] {
				ans[u] = accum[u]
			}
			for _, v := range adj[u] {
				accum[v] += ans[u]
				indeg[v]--
				if indeg[v] == 0 {
					q = append(q, v)
				}
			}
		}

		for i := 1; i <= n; i++ {
			out = strconv.AppendInt(out, ans[i], 10)
			if i == n {
				out = append(out, '\n')
			} else {
				out = append(out, ' ')
			}
		}
	}

	os.Stdout.Write(out)
}