Advertisement
Guest User

Untitled

a guest
May 20th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. struct Edge
  6. {
  7.     int From;
  8.     int To;
  9.     int Weight;
  10. };
  11.  
  12. bool operator < (const Edge& e1, const Edge& e2) {
  13.     return e1.Weight < e2.Weight;
  14. }
  15.  
  16.  
  17. typedef std::vector<std::vector<int>> Graph;
  18.  
  19.  
  20. void MST(const std::vector<Edge>& edges, std::vector<Edge>& treeEdges, int nVertex) {
  21.     std::vector<int> vertexId(nVertex);
  22.     for (int i = 0; i < nVertex; ++i) {
  23.         vertexId[i] = i;
  24.     }
  25.     for (int i = 0; i < edges.size(); ++i) {
  26.         const Edge& curEdge = edges[i];
  27.         if (vertexId[curEdge.From] != vertexId[curEdge.To]) {
  28.             treeEdges.push_back(curEdge);
  29.             int newId = vertexId[curEdge.From];
  30.             int oldId = vertexId[curEdge.To];
  31.             for (int j = 0; j < vertexId.size(); ++j) {
  32.                 if (vertexId[j] == oldId) {
  33.                     vertexId[j] = newId;
  34.                 }
  35.             }
  36.         }
  37.     }
  38. }
  39.  
  40.  
  41. int main() {
  42.     int n = 0, m = 0;
  43.     std::cin >> n >> m;
  44.     Graph graph(n);
  45.     std::vector<Edge> edges;
  46.     for (int i = 0; i < m; ++i) {
  47.         int from = 0, to = 0, weight = 0;
  48.         std::cin >> from >> to >> weight;
  49.         from -= 1;
  50.         to -= 1;
  51.         Edge edge;
  52.         edge.From = from;
  53.         edge.To = to;
  54.         edge.Weight = weight;
  55.         edges.push_back(edge);
  56.     }
  57.  
  58.     std::vector<Edge> tree;
  59.     std::sort(edges.begin(), edges.end());
  60.     MST(edges, tree, n);
  61.     int w = 0;
  62.     for (const Edge& edge : tree) {
  63.         w += edge.Weight;
  64.     }
  65.     std::cout << w << std::endl;
  66.     return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement