Skip to content

Commit ca293a0

Browse files
committed
add sj1
1 parent 2359c04 commit ca293a0

File tree

2 files changed

+109
-0
lines changed

2 files changed

+109
-0
lines changed

misc/codechef/codes/sj1.go

+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package main
2+
3+
import (
4+
"bufio"
5+
. "fmt"
6+
"io"
7+
)
8+
9+
func sj1(in io.Reader, _w io.Writer) {
10+
out := bufio.NewWriter(_w)
11+
defer out.Flush()
12+
_i, _n, buf := 0, 0, make([]byte, 1<<12)
13+
rc := func() byte {
14+
if _i == _n {
15+
_n, _ = in.Read(buf)
16+
if _n == 0 {
17+
return 0
18+
}
19+
_i = 0
20+
}
21+
b := buf[_i]
22+
_i++
23+
return b
24+
}
25+
r := func() (x int) {
26+
b := rc()
27+
for ; '0' > b; b = rc() {
28+
}
29+
for ; '0' <= b; b = rc() {
30+
x = x*10 + int(b&15)
31+
}
32+
return
33+
}
34+
gcd := func(a, b int) int {
35+
for a != 0 {
36+
a, b = b%a, a
37+
}
38+
return b
39+
}
40+
for T := r(); T > 0; T-- {
41+
n := r()
42+
g := make([][]int, n)
43+
for i := 1; i < n; i++ {
44+
v, w := r()-1, r()-1
45+
g[v] = append(g[v], w)
46+
g[w] = append(g[w], v)
47+
}
48+
a := make([]int, n)
49+
for i := range a {
50+
a[i] = r()
51+
}
52+
m := make([]int, n)
53+
for i := range m {
54+
m[i] = r()
55+
}
56+
57+
g[0] = append(g[0], -1)
58+
allAns := make([]int, n)
59+
var dfs func(int, int, int)
60+
dfs = func(v, fa, s int) {
61+
s = gcd(s, a[v])
62+
if len(g[v]) == 1 {
63+
allAns[v] = m[v] - gcd(m[v], s)
64+
} else {
65+
allAns[v] = -1
66+
}
67+
for _, w := range g[v] {
68+
if w != fa {
69+
dfs(w, v, s)
70+
}
71+
}
72+
}
73+
dfs(0, -1, 0)
74+
for _, v := range allAns {
75+
if v >= 0 {
76+
Fprint(out, v, " ")
77+
}
78+
}
79+
Fprintln(out)
80+
}
81+
}
82+
83+
//func main() { sj1(os.Stdin, os.Stdout) }

misc/codechef/codes/sj1_test.go

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package main
2+
3+
import (
4+
"github.com/EndlessCheng/codeforces-go/main/testutil"
5+
"testing"
6+
)
7+
8+
// https://www.codechef.com/problems/SJ1
9+
// https://www.codechef.com/status/SJ1?status=Correct
10+
// https://discuss.codechef.com/t/SJ1-editorial/
11+
func Test_SJ1(t *testing.T) {
12+
testCases := [][2]string{
13+
{
14+
`1
15+
5
16+
1 2
17+
2 5
18+
1 3
19+
3 4
20+
2 3 4 6 7
21+
1 2 3 2 10`,
22+
`0 9`,
23+
},
24+
}
25+
testutil.AssertEqualStringCase(t, testCases, 0, sj1)
26+
}

0 commit comments

Comments
 (0)