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];

}

}



이렇게 짜버리네..


걍 재귀돌리는게 더 깔쌈하고 보기도 편하지않낭..?


첨에 코드보고 뭔가 싶다가 직접 찾아보니까 다른 코드가 더 짧고 간결해보이더라..


흠좀무..