250x250
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 |
29 | 30 | 31 |
Tags
- 리소스모니터링
- html
- Properties
- BFS
- sql
- dfs
- javascript
- Java
- string
- CSS
- Union-find
- date
- scanner
- List
- math
- JPA
- 힙덤프
- GC로그수집
- deque
- union_find
- priority_queue
- map
- alter
- 큐
- set
- Calendar
- spring boot
- 스프링부트
- NIO
- 스택
Archives
- Today
- Total
매일 조금씩
백준 1717번: 집합의 표현 본문
728x90
반응형
Union_find를 활용하는 문제이다.
https://gimmesome.tistory.com/34
시간 초과를 계속 겪다가 continue를 활용하여 시간을 줄인 코드를 보고 고치다가 틀렸다는 말이 계속 나와 몇번이고 확인하다가 결국 참고한 코드를 그대로 쓰게 됐는데 나중에 알고보니 Yes여서 틀린 거였다는...
영양가 없이 시간을 엄청 잡아 먹었던 문제...
#include <iostream>
#include <algorithm>
using namespace std;
const int MAX = 1000000 + 1;
int N, M;
int arr[MAX];
int findParent(int num) {
//재귀함수 사용
if (arr[num] < 0)
return num;
int parent = findParent(arr[num]);
arr[num] = parent;
return parent;
//반복문 사용
/*
while(r != arr[r]){
//arr[r] = arr[arr[r]];
r = arr[r];
}
return r;
*/
}
void merge(int aParent, int bParent) {
/*
부모노드의 배열값은 집합의 크기이고
나머지 노드의 배열값은 부모노드를 가리킴
합쳐지면서 부모노드 자리를 뺏긴 노드는 그 배열 값이
집합의 크기 --> 부모가된 노드 로 바뀜
*/
//집합의 크기가 큰 쪽으로 합쳐짐
if (abs(arr[aParent]) >= abs(arr[bParent])) {
arr[aParent] += arr[bParent];
arr[bParent] = aParent;
}
else {
arr[bParent] += arr[aParent];
arr[aParent] = bParent;
}
}
int main(void) {
ios_base::sync_with_stdio(0);
cin.tie(0); //cin 실행속도 향상
cin >> N >> M;
for (int i = 0; i <= N; i++) {
arr[i] = -1;
}
for (int i = 0; i < M; i++) {
int op, a, b;
cin >> op >> a >> b;
if (op == 0) {
if (a == b)
continue;
int aParent = findParent(a);
int bParent = findParent(b);
if (aParent == bParent)
continue;
merge(aParent, bParent);
}
else {
if (a == b) {
cout << "YES\n";
continue;
}
int aParent = findParent(a);
int bParent = findParent(b);
if (aParent == bParent)
cout << "YES\n";
else
cout << "NO\n";
}
}
return 0;
}
728x90
반응형
'알고리즘' 카테고리의 다른 글
백준 10775번: 공항 (0) | 2020.03.09 |
---|---|
백준 1976번: 여행 가자 (0) | 2020.03.08 |
백준 5218번: 알파벳 거리 (0) | 2020.02.16 |
백준 5555번: 반지 (0) | 2020.02.16 |
백준 5598번: 카이사르 암호 (0) | 2020.02.12 |