usingnamespace std;using ll =longlong;int v, e, a, b, w,ans=0;int pre[10009];structEdge{int v1, v2, val;};
vector<Edge>edges;voidinit(){for(int i =1; i <= v; i++){
pre[i]= i;}}intfind(int x){return pre[x]= pre[x]== x ? x :find(pre[x]);}voidmerge(int x,int y){
x =find(x);
y =find(y);if(x == y)return;
pre[x]= y;}voidsolve(){
cin >> v >> e;init();//别忘记初始化pre数组!while(e--){
cin >> a >> b >> w;
edges.push_back({ a,b,w });}sort(edges.begin(), edges.end(),[&](const Edge &a,const Edge&b){//lambda表达式return a.val < b.val;});for(int i =0; i < edges.size(); i++){int x =find(edges[i].v1);int y =find(edges[i].v2);if(x != y){merge(x, y);
ans += edges[i].val;}}
cout << ans;}intmain(){
std::ios::sync_with_stdio(false);
std::cin.tie(0); std::cout.tie(0);solve();return0;}
输出连接的边
for(int i =0; i < edges.size(); i++){int x =find(edges[i].v1);int y =find(edges[i].v2);if(x != y){merge(x, y);
ans += edges[i].val;
cout<<edges[i].v1<<"->"<<edges[i].v2<<endl;//本来就是对边操作,直接输出就好了}}