#include<bits/stdc++.h>
using namespace std;
const int N = 1e6;
int n, m,p[N];
struct Edge {
int a;
int b;
int w;
}edge[N];
bool cmp(Edge a, Edge b) {
return a.w < b.w;
}
int find(int x) {
if (p[x] != x) p[x] = find(p[x]);//p数组存的是x的祖先;
return p[x];
}
void kruskal() {
for (int i = 0;i < n;i++) p[i] = i;//初始化并查集
sort(edge, edge + m, cmp);
int res = 0;
int cnt = 0;
for (int i = 0;i < m;i++) {
int a = edge[i].a, b = edge[i].b, w = edge[i].w;
if (find(a) != find(b)) {
p[find(a)] = p[find(b)];//将a,b所在的两个集合连接起来,即a,b祖先一样;
cnt++;//因为加入的是a-b的这一条边,将a,b所在的两个集合连接之后,全部集合中的边数加1
res += w;
}
}
if (cnt == n - 1) {//树中有n个节点便有n-1条边,如果cnt不等于n-1的话,说明无法生成有n个节点的树
cout << res << endl;
}
else cout << "impossible" << endl;
}
int main() {
cin >> n >> m;
for (int i = 0;i < m;i++) {
int a, b, c;
cin >> a >> b >> c;
edge[i] = { a,b,c};
}
kruskal();
return 0;
}
5. 分区相关操作
该类操作与SQL语句执行计划中分区表操作相关。根据不同的具体SQL语句及其他相关因素,如下各操作可能会出现于相关SQL语句的执行计划。
1)PARTITION RANGE ALL
对范围分区(RANGE PARTITION)表的所有分区进行子…