티스토리 뷰
유니온파인드를 공부하고 싶어서 풀었는데 결국 아이디어는 못떠올렸다...
신박하다.... 멋있어... 유니온파인드...
잘 쓰는법을 모르는데 공부해야겠다...
문제를 푸는 방법은 우선 공항에 비행기를 도킹할 때 항상 넣을 수 있는 가장 큰 수에 도킹한다. 이걸 이용해서 유니온 파인드를 한다. 만약 s에 넣는다면 s의 부모를 s-1로 바꾼다. 그럼 언젠가 0이 되어 버리는데 0이 되는 순간 도킹할 수 있는 자리가 없다는 말이다..! 신박해..! 공부해봐야겠다
소스코드
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 32 | #include <iostream> #include <algorithm> using namespace std; #define MAXN 100010 int p[MAXN], n; int find(int x) { if (x == p[x]) return x; return p[x] = find(p[x]); } void merge(int x, int y) { x = find(x); y = find(y); if (x == y) return; p[x] = y; } int main() { scanf(" %d", &n); for (int i = 1; i <= n; i++) p[i] = i; int m; scanf(" %d", &m); int ans = 0; for (int i = 0; i < m; i++) { int x; scanf(" %d", &x); if (!find(x)) break; ans++; int c = find(x); merge(c, c-1); } printf("%d\n", ans); } | cs |
'알고리즘 > BOJ' 카테고리의 다른 글
[백준] 15352 욱제와 그의 팬들 (1) | 2018.07.04 |
---|---|
[백준] 4991 로봇 청소기 (0) | 2018.07.04 |
[백준] 9519 졸려 (0) | 2018.07.03 |
[백준] 1222 홍준 프로그래밍 대회 (0) | 2018.07.03 |
[백준] 1184 귀농 (2) | 2018.07.03 |
댓글