int set_find(int vertex) {
int p, s, i = -1;
for (i = vertex; (p=parent[i]) >= 0; i = p)
;
s = i;
for (i = vertex; (p = parent[i]) >= 0; i = p)
parent[i] = s;
return s;
}
void set_union(int s1, int s2) {
s1 = set_find(s1);
s2 = set_find(s2);
if (num[s1]
parent[s1] = s2;
num[s2] += num[s1];
}
else {
parent[s2] = s1;
num[s1] += num[s2];
}
}
이렇게 짜버리네..
걍 재귀돌리는게 더 깔쌈하고 보기도 편하지않낭..?
첨에 코드보고 뭔가 싶다가 직접 찾아보니까 다른 코드가 더 짧고 간결해보이더라..
흠좀무..
스택이 터질수가 있어서
stack overflow?
오홍 그럼 상황에 따라서는 저 코드가 쓰임새가 있다는 말씀이시군여.. 감사합니당
난 맨날 저렇게짬
오 재귀안돌리는건 첨보네
근데 경로 압축하면 많아야 O(logn) 재귀도는데 변수 할당 하나도 안한 logn 깊이 재귀호출이 스택 터질 일이 있나