Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Kotlin
- Codeforces
- Rxjava
- Coroutine
- TEST
- AWS
- android
- livedata
- Coroutines
- Compose
- textfield
- 백준
- 코드포스
- 암호학
- MyVoca
- Gradle
- boj
- 코루틴
- ProGuard
- 쿠링
- architecture
- activity
- MiTweet
- relay
- Python
- Hilt
- GitHub
- pandas
- androidStudio
- 프로그래머스
Archives
- Today
- Total
이동식 저장소
13418. 학교 탐방하기 본문
코로나 새내기들에게 꼭 필요한 문제
13418번: 학교 탐방하기
입력 데이터는 표준 입력을 사용한다. 입력은 1개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 건물의 개수 N(1 ≤ N ≤ 1,000)과 도로의 개수 M(1 ≤ M ≤ N(N-1)/2) 이 주어진다. 입력의 두 번
www.acmicpc.net
학교 지도가 연결 그래프로 주어진다. 학교의 모든 건물을 탐방하는 경로 중 피로도가 최대일 때와 최소일 때의 차이를 구해야 한다. 피로도는 지나간 오르막길의 개수의 제곱으로 계산하므로, 오르막길을 가장 많이(또는 적게) 지나가는 경우를 구해야 한다.
건물 $N$개와 입구까지 총 $N+1$개의 노드를 연결하는 트리에는 간선이 $N$개 존재한다.
지문은 거창하지만, 그냥 최소 스패닝 트리 문제이다. 피로도가 최대인 경우를 계산하려면 오르막길과 내리막길의 가중치를 각각 0과 1로 두고 MST를 만들면 된다. 만든 MST의 가중치의 합은 내리막길의 수와 같으므로, 구한 값을 $N$에서 빼면 오르막길의 개수를 구할 수 있다. 이 값을 $h_{1}$이라 하자.
피로도가 최소인 경우를 계산하려면 오르막길과 내리막길의 가중치를 서로 바꿔서 계산하면 된다. 그러면 MST에 포함되는 오르막길의 수를 바로 구할 수 있다. 이 값을 $h_{2}$라 하자.
마지막으로 $(h_{1})^{2} - (h_{2})^{2}$를 출력하기만 하면 된다. 참 쉽죠?
재밌어 보여서 골랐는데, 그냥 구현 문제였네..
'Problem Solving > BOJ' 카테고리의 다른 글
14719. 빗물 (0) | 2023.03.25 |
---|---|
20925. 메이플스토리 (0) | 2023.03.25 |
1445. 일요일 아침의 데이트 (0) | 2022.11.29 |
19582. 200년간 폐관수련했더니 PS 최강자가 된 건에 대하여 (0) | 2022.11.23 |
1311. 할 일 정하기 1 (0) | 2022.10.20 |
Comments