Notice
Recent Posts
Recent Comments
Link
거의 알고리즘 일기장
백준 1717번 _ 집합의 표현 본문
https://www.acmicpc.net/problem/1717
1. 풀이방법
전형적인 union - find 문제다
2. 코드
#include<iostream>
#include <algorithm>
using namespace std;
int parents[1000005];
void parentsInit(int n)
{
for (int i = 1; i <= n; i++)
parents[i] = i;
}
int getParent(int a)
{
if (parents[a] == a) return a;
return parents[a] = getParent(parents[a]);
}
void Union(int a, int b)
{
a = getParent(a);
b = getParent(b);
if (a == b) return;
parents[b] = a;
}
int main()
{
int n, m;
cin >> n >> m;
parentsInit(n);
int order, a, b;
for (int i = 0; i < m; i++)
{
cin >> order >> a >> b;
if (order == 0)
{
//a, b를 합친다
Union(a, b);
}
else
{
//a, b의 연결여부를 확인한다.
if (getParent(a) == getParent(b))
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}
3. 후기
연결여부를 확인할때 배열값을 받는 멍청한 오타를 쳐서 계속 틀렸는데 함수와 비슷해서 정말 찾기 쉽지않았다..
정말 열받았지만
return parents[a] = getParent(parents[a]);
그거 찾으려고 이리 저리 보던 결과 이걸 왜하는지 아직까지 몰랐었는데 트리의 압축을 위해서 한다는 걸 알았기때문에 삽질이었어도 그나마 마음의 위안이 되었다.
반응형
'알고리즘 문제풀이' 카테고리의 다른 글
백준 15686번 _ 치킨 배달 (0) | 2020.04.08 |
---|---|
백준 15685번 _ 드래곤 커브 (0) | 2020.04.07 |
백준 15684번 _ 사다리 조작 (0) | 2020.04.06 |
백준 4386번 _ 별자리 만들기 (0) | 2020.04.06 |
백준 1197번 _최소 스패닝 트리 (0) | 2020.04.05 |
Comments