标签:nio 压缩 之间 color code root bsp size 初始化
执行用时 :32 ms, 在所有 C 提交中击败了92.68%的用户 内存消耗 :8.3 MB, 在所有 C 提交中击败了100.00%的用户 int Find(int set[], int x) { for(;set[x]!=x;x=set[x]); return x; } 执行用时 :28 ms, 在所有 C 提交中击败了99.29%的用户 内存消耗 :8.2 MB, 在所有 C 提交中击败了100.00%的用户 // 路径压缩 int Find2(int set[], int x) { if(set[x] == x) return x; else return set[x] = Find(set, set[x]); } // 按秩归并 void Union(int* set, int* size, int r1, int r2) { if(size[r1] > size[r2]) { set[r2] = r1; size[r1] += size[r2]; } else { set[r1] = r2; size[r2] += size[r1]; } } int findCircleNum(int** M, int MSize, int* MColSize){ int set[MSize], size[MSize], i, j, count=0, root1, root2; // 初始化并查集 for(i=0;i<MSize;i++) { set[i]=i; size[i] = 1; } for(i=1;i<MSize;i++) { for(j=0;j<MSize && j<i;j++) { // 只遍历下三角 if(M[i][j] == 1) { // 看看他俩分别是哪个圈子的 root1 = Find2(set, i); root2 = Find2(set, j); // 圈子不同,合并! if(root1 != root2) { Union(&set, &size, root1, root2); } } } } for(i=0;i<MSize;i++) { if(set[i] == i) count++; } return count; }
标签:nio 压缩 之间 color code root bsp size 初始化
原文地址:https://www.cnblogs.com/hueralin/p/12150543.html