Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- struct Edge
- {
- int From;
- int To;
- int Weight;
- };
- bool operator < (const Edge& e1, const Edge& e2) {
- return e1.Weight < e2.Weight;
- }
- typedef std::vector<std::vector<int>> Graph;
- void MST(const std::vector<Edge>& edges, std::vector<Edge>& treeEdges, int nVertex) {
- std::vector<int> vertexId(nVertex);
- for (int i = 0; i < nVertex; ++i) {
- vertexId[i] = i;
- }
- for (int i = 0; i < edges.size(); ++i) {
- const Edge& curEdge = edges[i];
- if (vertexId[curEdge.From] != vertexId[curEdge.To]) {
- treeEdges.push_back(curEdge);
- int newId = vertexId[curEdge.From];
- int oldId = vertexId[curEdge.To];
- for (int j = 0; j < vertexId.size(); ++j) {
- if (vertexId[j] == oldId) {
- vertexId[j] = newId;
- }
- }
- }
- }
- }
- int main() {
- int n = 0, m = 0;
- std::cin >> n >> m;
- Graph graph(n);
- std::vector<Edge> edges;
- for (int i = 0; i < m; ++i) {
- int from = 0, to = 0, weight = 0;
- std::cin >> from >> to >> weight;
- from -= 1;
- to -= 1;
- Edge edge;
- edge.From = from;
- edge.To = to;
- edge.Weight = weight;
- edges.push_back(edge);
- }
- std::vector<Edge> tree;
- std::sort(edges.begin(), edges.end());
- MST(edges, tree, n);
- int w = 0;
- for (const Edge& edge : tree) {
- w += edge.Weight;
- }
- std::cout << w << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement