Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.93 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <stack>
  4. #include <queue>
  5. #include <fstream>
  6. const int INF = 10000000;
  7.  
  8. std::ifstream input("spantree2.in");
  9. std::ofstream output("spantree2.out");
  10. int primMST(int &n, int &m, std::vector < std::vector < std::pair <int, int>>> &Table)
  11. {
  12.  
  13.     std::priority_queue< std::pair<int,int>, std::vector <std::pair<int,int>>, std::greater<std::pair<int,int>>> pq;
  14.  
  15.     int src = 0;
  16.  
  17.     std::vector<int> key;
  18.     key.resize(n, INF);
  19.  
  20.  
  21.     std::vector<bool> inMST;
  22.     inMST.resize(n, false);
  23.  
  24.     pq.push(std::make_pair(0, src));
  25.     key[src] = 0;
  26.  
  27.     int res = 0;
  28.  
  29.     while (!pq.empty())
  30.     {
  31.         int u = pq.top().second;
  32.         pq.pop();
  33.  
  34.         inMST[u] = true;
  35.  
  36.         for (int i = 0; i < (int)Table[u].size(); i++)
  37.         {
  38.             int v = Table[u][i].first;
  39.             int weight = Table[u][i].second;
  40.  
  41.             if (inMST[v] == false && key[v] > weight)
  42.             {
  43.                 key[v] = weight;
  44.                 pq.push(std::make_pair(key[v], v));
  45.             }
  46.         }
  47.     }
  48.  
  49.     for (int i = 0; i < (int)key.size(); i++)
  50.         res += key[i];
  51.  
  52.     output << res;
  53.  
  54.     return 0;
  55. }
  56.  
  57. int main() {
  58.     std::vector < std::vector < std::pair <int, int>>> Table;
  59.     std::pair<int,int> Pairs_of_elements;
  60.     int n, m;
  61.     input >> n >> m;
  62.     Table.resize(n);
  63.     for (int i = 0; i < m; i++)
  64.     {
  65.         int u, v, w;
  66.         input >> u >> v >> w;
  67.         u--;
  68.         v--;
  69.         Table[u].push_back({ v, w });
  70.         Table[v].push_back({ u, w });
  71.     }
  72.  
  73.     primMST(n, m, Table);
  74.  
  75.  
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement