最小生成树裸题,同【洛谷模板题 最小生成树】kruskal算法入门
#include <iostream>
#include <algorithm>
#define endl "\n"
using namespace std;
struct Edge
{
int start,end,length;
bool operator < (const Edge& t)
{
return length < t.length;
}
} edge[100000];
int pre[1005];
int find_set(int x)
{
return x == pre[x] ? x : pre[x] = find_set(pre[x]);
}
int n,m;
int main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=0; i<m; ++i)
cin>>edge[i].start>>edge[i].end>>edge[i].length;
sort(edge,edge+m);
for(int i=1; i<=n; ++i)
pre[i] = i;
int sum = 0;
for(int i=0,cnt=0; i<m && cnt!=n-1; ++i)
{
if(find_set(edge[i].start) != find_set(edge[i].end))
{
pre[pre[edge[i].start]] = pre[edge[i].end];
sum += edge[i].length;
++cnt;
}
}
cout<<sum;
return 0;
}