Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/

문제 https://www.acmicpc.net/problem/1693 1693번: 트리 색칠하기 n개의 정점으로 이루어진 트리가 있다. 이 트리의 각 정점을 색칠하려고 한다. 색칠을 할 때에는 1, 2, 3, …, n번 색깔 중에 하나로 색칠하여야 한다. 각 색깔을 사용하여 한 개의 정점을 색칠할 때 www.acmicpc.net 풀이 solved.ac 난이도: Platium 3 상당히 해결하기 어려웠던 트리에서의 다이나믹 프로그래밍 문제. 해당 문제의 풀이는 koosaga님과 BaaaaaaaarkingDog님의 풀이를 참고하였습니다. T(N): 반드시 N개의 색을 사용해야 트리를 최소 비용으로 칠할 수 있는 트리들 중에서 최소 노드 개수 라고하자. 반드시 N개의 색을 써야 한다면 루트 노드의 자식 노드..
*문제들의 난이도 분류는 종만북 혹은 solved.ac 출처임을 밝힙니다.* ★ 문제는 작성자가 다시 풀어보고 싶은 문제 혹은 어려웠던 문제입니다. +가 붙은 문제는 해당 문제에서 중요하게 생각하는 부분입니다. 알고스팟 - 너드인가, 너드가 아닌가? 2 (NER2)★ - 중 + 이진 검색 트리 알고스팟 - 요새(FORTRESS) - 중 백준 - 트리의 순회(2263) - Gold 3 백준 - 트리의 지름(1967) - Gold 4 백준 - 사회망 서비스(2533) - Gold 3 백준 - 트리 색칠하기(1693)★★ - Platium 3 백준 - 이진 탐색 트리(2957)★ - Platium 5 백준 - 트리의 가중치(1289) - Platium 3 최소 공통 조상 (Lowest Common Ancest..

문제 https://algospot.com/judge/problem/read/NERD2 algospot.com :: NERD2 너드인가, 너드가 아닌가? 2 문제 정보 문제 대 성황이었던 지난 알고스팟 연간 모의고사 이후 프로그래밍 대회의 열기는 날로 뜨거워져 올해는 10만명이 넘는 사람들이 참가 신청을 할 것으로 algospot.com 풀이 종만북 난이도: 중 STL의 map 자료구조를 이용하면 직접 이진 검색 트리를 구현하지 않아도 풀 수 있다. map은 key와 value 쌍을 pair자료구조로 저장한다. 이때 value들은 key값을 기준으로 이진 검색 트리에 정렬되어 저장된다. 너드 지수를 구하는 값 p와 q를 아래와 같이 2차원으로 나타내 보자. 참가자 4명의 너드 지수가 (p,q) 1.50,..

문제 https://www.acmicpc.net/problem/1289 1289번: 트리의 가중치 첫째 줄에 트리의 정점의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N-1개의 줄에 대해 각 줄에는 세 개의 정수 A, B, W(1 ≤ A, B ≤ N, 0 ≤ W ≤ 1,000)가 입력되는데 이는 A점과 B점이 연결되어 있고 이 www.acmicpc.net 풀이 solved.ac 난이도: Platium 3 트리에서의 다이나믹 프로그래밍으로 분류되었지만 풀어보니 본인의 풀이에는 다이나믹이 사용될 부분은 없었다. 트리의 모든 경로를 하나 하나 계산하기에는 특정 노드에서 모든 노드 하나하나의 경로 수를 계산해보면 N(특정 노드)*(N-1)(선택한 노드 이외의 모든 노드)의 경로 수가 존재한다. 이..

문제 https://www.acmicpc.net/problem/3176 3176번: 도로 네트워크 첫째 줄에 N이 주어진다. (2 ≤ N ≤ 100,000) 다음 N-1개 줄에는 도로를 나타내는 세 정수 A, B, C가 주어진다. A와 B사이에 길이가 C인 도로가 있다는 뜻이다. 도로의 길이는 1,000,000보다 작거나 같은 양 www.acmicpc.net 풀이 solved.ac 난이도: Platium 4 DP를 이용한 최소 공통 조상 알고리즘을 사용하여 해결하는 문제. 해당 문제는 LCA 2(11438)와 정점들의 거리(1761)에서 사용한 풀이에서 도로의 최소, 최대를 저장하는 계산만 추가하면 해결할 수 있다. x의 2^k(2의 k승) 번째 조상까지의 최소 도로를 min_road[x][k]라고 하자..

문제 https://www.acmicpc.net/problem/1761 1761번: 정점들의 거리 첫째 줄에 노드의 개수 N이 입력되고 다음 N-1개의 줄에 트리 상에 연결된 두 점과 거리를 입력받는다. 그 다음 줄에 M이 주어지고, 다음 M개의 줄에 거리를 알고 싶은 노드 쌍이 한 줄에 한 쌍씩 www.acmicpc.net 풀이 solved.ac 난이도: Platium 5 트리에는 두 노드의 경로는 유일하다. 두 노드의 쌍을 받은 후 한 노드에서 다른 노드로 직접 이동하며 거리합을 구하는 것이 가장 간단한 해결 방법이겠지만, 어느 경로로 이동해야 다른 노드로 이동할 수 있는지 알 수 없다. 따라서 최소 공통 조상(LCA)을 구하여 각 노드에서의 LCA로의 거리의 합을 구하면 두 노드 사이의 거리를 알 ..

문제 https://www.acmicpc.net/problem/11438 11438번: LCA 2 첫째 줄에 노드의 개수 N이 주어지고, 다음 N-1개 줄에는 트리 상에서 연결된 두 정점이 주어진다. 그 다음 줄에는 가장 가까운 공통 조상을 알고싶은 쌍의 개수 M이 주어지고, 다음 M개 줄에는 정 www.acmicpc.net 풀이 solved.ac 난이도: Platium 5 이전 단계 문제인 LCA 와는 다르게 입력의 크기가 크고 제한 시간이 더 짧다. 따라서 최소 공통 조상 알고리즘을 최적화해야 한다. 최적화는 다이나믹 프로그래밍을 이용한 전처리를 통해 LCA를 찾는 시간 복잡도를 O(log Tree_heigth)으로 줄일 수 있다. 이를 위해 x의 2^k(2의 k승)번째 조상을 parent[x][k]..
문제 https://www.acmicpc.net/problem/11437 11437번: LCA 첫째 줄에 노드의 개수 N이 주어지고, 다음 N-1개 줄에는 트리 상에서 연결된 두 정점이 주어진다. 그 다음 줄에는 가장 가까운 공통 조상을 알고싶은 쌍의 개수 M이 주어지고, 다음 M개 줄에는 정 www.acmicpc.net 풀이 solved.ac 난이도: Gold 3 트리에 속한 두 노드의 최소 공통 조상(Lowest Common Ancestor)을 찾는 문제이다. 동일한 문제이지만 입력의 수가 더 많고 시간제한이 짧은 LCA 2와는 다르게 단순히 구현해도 시간안에 해결할 수 있다. 일단 LCA2를 푸는 기초가 되는 풀이를 살펴보자. 두 노드는 어느 곳에 위치하든 조상 노드로 한 칸씩 위로 올라가다 보면 ..
문제 https://www.acmicpc.net/problem/1967 1967번: 트리의 지름 파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연 www.acmicpc.net 풀이 solved.ac 난이도: Gold 4 트리의 높이를 구하는 것을 응용한 문제. 비슷한 문제를 미리 풀어서 쉽게 해결했다. [알고스팟] FORTRESS - 요새 (C++, 트리) 부모 노드에서 자식 노드로 가는 것은 가중치(cost)가 추가된다. 두 노드 사이의 경로의 비용합이 최대인 것이 트리의 지름이 된다. 지름이 되는 두 노드는 두가지 경우가 존재한다. 1. 루..