← Back to List

15900번: 나무 탈출 ↗

Solutions

Go
971 B | 971 chars
package main

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

var writer *bufio.Writer
var reader *bufio.Reader

var depth [550000]int
var edges [550000][]int

func Print(a ...interface{}) {
	fmt.Fprintln(writer, a...)
}

func ReadInt() int {
	var n int
	fmt.Fscan(reader, &n)
	return n
}

func f(crt int, parent int) {
	for _, next := range edges[crt] {
		if next == parent {
			continue
		}
		depth[next] = depth[crt] + 1
		f(next, crt)
	}
}

func Solve() {
	n := ReadInt()

	for i := 0; i < n-1; i++ {
		var a, b int
		fmt.Fscan(reader, &a, &b)
		edges[a] = append(edges[a], b)
		edges[b] = append(edges[b], a)
	}

	for i := 1; i <= n; i++ {
		depth[i] = -1
	}

	depth[1] = 0
	f(1, -1)

	ans := 0

	for i := 1; i <= n; i++ {
		if len(edges[i]) != 1 {
			continue
		}

		ans += depth[i]
		ans %= 2
	}

	if ans == 1 {
		Print("Yes")
	} else {
		Print("No")
	}
}

func main() {
	writer = bufio.NewWriter(os.Stdout)
	reader = bufio.NewReader(os.Stdin)
	defer writer.Flush()

	Solve()
}