卡鲁斯卡尔 求最小生成树,模板题,直接做就行
class Solution {
public:
int find(int x)//并查集合并及查找根节点
{
if(x !=p[x])
p[x] = find(p[x]);
return p[x];
}
int p[100010];
int miniSpanningTree(int n, int m, vector<vector<int> >& cost) {
// write code here
for(int i = 0; i <= n; i++) p[i] = i;//初始化并查集
//排序
sort(cost.begin(),cost.begin() + m, [](vector<int>& a, vector<int> &b){return a[2] < b[2];});
int res = 0;
for(int i = 0; i < m; i++)
{
if(find(cost[i][0]) != find(cost[i][1]))//如果不是同一个集合,
{
res += cost[i][2];//加路
p[find(cost[i][0])] = find(cost[i][1]);//合并集合
}
}
return res;
}
}; 
京公网安备 11010502036488号