티스토리 뷰
문제
알고리즘
Greedy
풀이
인접한 지역과 거의 인접한 지역에 다른 종류의 풀을 심어야 할 때, 풀 종류의 최솟값을 묻는 문제입니다.
주어진 예제말고도 그림을 그려 특징을 파악하며 풀면 됩니다. 한 노드 A에 인접한 노드 B, C, D가 있다고 가정해봅시다. 이 노드들은 A와는 무조건 다른 종류의 풀을 사용해야만 합니다. 하지만 A를 제외한 B의 인접 노드에 풀을 심을 때는 A와 다른 종류의 풀을 심어야 하지만(A는 두칸이 떨어져 있어 거의 인접한 지역이므로) C, D에 심었던 풀을 심을 수 있음을 관찰하면 됩니다. 일반화하면 노드 중 최대 indegree값 + 1 이 정답입니다.
코드
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < n; ++i)
#define REP(i, n) for (int i = 1; i <= n; ++i)
using namespace std;
int N;
int cnt[100000];
int main() {
#ifndef ONLINE_JUDGE
freopen("in", "r", stdin);
freopen("out", "w", stdout);
#endif
cin.tie(NULL);
cout.tie(NULL);
ios::sync_with_stdio(false);
cin >> N;
rep(i, N - 1) {
int a, b;
cin >> a >> b;
--a, --b;
cnt[a]++;
cnt[b]++;
}
cout << *max_element(cnt, cnt + N) + 1;
return 0;
}
'Algorithm' 카테고리의 다른 글
[백준 13512] 트리와 쿼리 3 (0) | 2020.12.29 |
---|---|
[백준 17025] Icy Perimeter (0) | 2020.12.28 |
[백준 17408] 수열과 쿼리 24 (0) | 2020.12.26 |
[백준 17038] The Great Revegetation (Silver) (0) | 2020.12.08 |
[백준 17037] Painting the Barn (Silver) (0) | 2020.12.05 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- bfs
- Oracle
- 트라이
- 좌표압축
- dfs
- Fenwick
- dijkstra
- knapsack
- 동적계획법
- kmp
- string
- sweeping
- 정렬
- hld
- implementation
- 스위핑
- greedy
- spring boot
- sorting
- SCC
- 이분탐색
- 펜윅트리
- DP
- 2-SAT
- Segment tree
- spring
- 이분매칭
- union find
- 세그먼트트리
- Suffix Array
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
글 보관함