并查集和root是哪个节点毫无关系题意为【用权值尽可能小的边,将这n个节点连起来】
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std
;
vector
<int> nodes
;
int fd(int x
) { return nodes
[x
] = nodes
[x
] == x
? x
: fd(nodes
[x
]); }
int main() {
int n
, m
, root
;
cin
>> n
>> m
>> root
;
for (int i
= 0; i
<= n
; ++i
) nodes
.push_back(i
);
vector
<int> e(3);
vector
<vector
<int> > edge
;
while (m
--) {
cin
>> e
[2] >> e
[1] >> e
[0];
edge
.push_back(e
);
}
sort(edge
.begin(), edge
.end());
for (int i
= 0; i
< edge
.size(); ++i
) {
int x
= fd(edge
[i
][1]), y
= fd(edge
[i
][2]);
if (x
!= y
) {
if (--n
== 1) {
cout
<< edge
[i
][0] << endl
;
break;
}
nodes
[x
] = y
;
}
}
return 0;
}
转载请注明原文地址: https://mac.8miu.com/read-486001.html