가장 작은 값이 합칩합의 대표 원소로 나타낼 수 있도록 기록해 놓는다.
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 33 34 35 36 37 | #include <stdio.h> int arr[1000001]; int check(int index) { if (arr[index] == index) return index; arr[index] = check(arr[index]); return arr[index]; } int main(void) { int t; scanf("%d", &t); for (int z = 1; z <= t; z++) { printf("#%d ", z); int n, m; scanf("%d%d", &n,&m); for (int i = 0; i <= n; i++) arr[i] = i; for (int i = 0; i < m; i++) { int a, b, c; scanf("%d%d%d", &a,&b,&c); int temp1=check(b); int temp2 = check(c); if (a == 0) { arr[temp1] = temp2; } else { if (temp1==temp2) printf("1"); else printf("0"); } } printf("\n"); } } | cs |