Skip to content

Commit fab0f92

Browse files
committed
CF1593E
1 parent 8217eaf commit fab0f92

File tree

2 files changed

+120
-0
lines changed

2 files changed

+120
-0
lines changed

main/1500-1599/1593E.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package main
2+
3+
import (
4+
"bufio"
5+
. "fmt"
6+
"io"
7+
)
8+
9+
// github.com/EndlessCheng/codeforces-go
10+
func CF1593E(_r io.Reader, _w io.Writer) {
11+
in := bufio.NewReader(_r)
12+
out := bufio.NewWriter(_w)
13+
defer out.Flush()
14+
15+
var T, n, k, v, w int
16+
for Fscan(in, &T); T > 0; T-- {
17+
Fscan(in, &n, &k)
18+
g := make([][]int, n)
19+
d := make([]int, n)
20+
for i := 1; i < n; i++ {
21+
Fscan(in, &v, &w)
22+
v--
23+
w--
24+
g[v] = append(g[v], w)
25+
g[w] = append(g[w], v)
26+
d[v]++
27+
d[w]++
28+
}
29+
if n < 3 {
30+
Fprintln(out, 0)
31+
continue
32+
}
33+
q := make([]int, 0, n)
34+
for i, d := range d {
35+
if d == 1 {
36+
q = append(q, i)
37+
}
38+
}
39+
for ; k > 0 && len(q) > 0; k-- {
40+
sz := len(q)
41+
for _, v := range q {
42+
for _, w := range g[v] {
43+
if d[w]--; d[w] == 1 {
44+
q = append(q, w)
45+
}
46+
}
47+
}
48+
q = q[sz:]
49+
}
50+
Fprintln(out, cap(q))
51+
}
52+
}
53+
54+
//func main() { CF1593E(os.Stdin, os.Stdout) }

main/1500-1599/1593E_test.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package main
2+
3+
import (
4+
"github.com/EndlessCheng/codeforces-go/main/testutil"
5+
"testing"
6+
)
7+
8+
// https://codeforces.com/problemset/problem/1593/E
9+
// https://codeforces.com/problemset/status/1593/problem/E
10+
func TestCF1593E(t *testing.T) {
11+
// just copy from website
12+
rawText := `
13+
inputCopy
14+
6
15+
16+
14 1
17+
1 2
18+
2 3
19+
2 4
20+
4 5
21+
4 6
22+
2 7
23+
7 8
24+
8 9
25+
8 10
26+
3 11
27+
3 12
28+
1 13
29+
13 14
30+
31+
2 200000
32+
1 2
33+
34+
3 2
35+
1 2
36+
2 3
37+
38+
5 1
39+
5 1
40+
3 2
41+
2 1
42+
5 4
43+
44+
6 2
45+
5 1
46+
2 5
47+
5 6
48+
4 2
49+
3 4
50+
51+
7 1
52+
4 3
53+
5 1
54+
1 3
55+
6 1
56+
1 7
57+
2 1
58+
outputCopy
59+
7
60+
0
61+
0
62+
3
63+
1
64+
2`
65+
testutil.AssertEqualCase(t, rawText, 0, CF1593E)
66+
}

0 commit comments

Comments
 (0)