반응형

https://www.acmicpc.net/problem/15900

 

15900번: 나무 탈출

평소에 사이가 좋지 않던 성원이와 형석이가 드디어 제대로 한 판 붙으려고 한다. 성원이와 형석이 둘과 모두 똑같이 친한 인섭이가 대결 종목을 정해 가져왔다. 바로 '나무 탈출' 이라는 보드게

www.acmicpc.net

 

리프 노드의 개수와 모든 리프 노드 깊이의 합으로 게임을 이길 수 있는지 구해주었습니다.

 

#include <iostream>
#include <vector>
using namespace std;
#define MAX 500001

int n, a, b, leafCnt = 0, leafDepth = 0;
vector<int> graph[MAX];

void calTotalLeafDepthAndLeafCnt(int node, int prv, int d) {
	bool hasChild = false;
	for (auto nxt : graph[node]) {
		if (nxt == prv) continue;
		hasChild = true;
		calTotalLeafDepthAndLeafCnt(nxt, node, d + 1);
	}
	if (!hasChild) {
		leafCnt++;
		leafDepth += d;
	}
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	cin >> n;
	for (int i = 1; i < n; i++) {
		cin >> a >> b;
		graph[a].push_back(b);
		graph[b].push_back(a);
	}
	calTotalLeafDepthAndLeafCnt(1, -1, 1);
	if ((leafDepth + leafCnt) % 2) cout << "Yes";
	else cout << "No";
}
반응형

'Algorithm' 카테고리의 다른 글

백준 1747 : 소수&팰린드롬  (0) 2021.11.19
백준 1240 : 노드사이의 거리  (0) 2021.11.19
백준 1953 : 팀배분  (0) 2021.11.19
백준 14675 : 단절점과 단절선  (0) 2021.11.19
백준 4256 : 트리  (0) 2021.11.19

+ Recent posts