parv28

Untitled

Jul 17th, 2023
746
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.51 KB | None | 1 0
  1.  
  2. class Solution {
  3. public:
  4.     int minCostConnectPoints(vector<vector<int>>& points) {
  5.         int n = points.size();
  6.         vector<vector<pair<int, int>>> adjList(n);
  7.  
  8.         // Make the graph
  9.         for(int i = 0;i<n;i++){
  10.             for(int j = i+1;j<n;j++){
  11.                 int distance = abs(points[i][0]-points[j][0]) + abs(points[i][1]-points[j][1]);
  12.                 adjList[i].push_back({j, distance});
  13.                 adjList[j].push_back({i, distance});
  14.             }
  15.         }
  16.         // Implement Prim's Algo
  17.         // Priority Queue of (weight, (node, parent))
  18.         priority_queue<pair<int, pair<int, int>>, vector <pair<int, pair<int, int>>>, greater<pair<int, pair<int, int>>>> minHeap;
  19.  
  20.         // Let's start with 0th vertex - Start with a random node in Graph
  21.         minHeap.push(make_pair(0, make_pair(0, -1)));
  22.         vector<bool> visited(n, false);
  23.         int ans = 0, edges_added = 0;
  24.         while(edges_added < n){
  25.             pair<int, pair<int, int>> curr = minHeap.top();
  26.             minHeap.pop();
  27.  
  28.             int weight = curr.first;
  29.             int node = curr.second.first;
  30.             int parent = curr.second.second;
  31.            
  32.             if(visited[node]) continue;
  33.             visited[node] = true;
  34.             for(auto u:adjList[node]){
  35.                 if(!visited[u.first]){
  36.                     minHeap.push(make_pair(u.second, make_pair(u.first, node)));
  37.                 }
  38.             }
  39.  
  40.             ans += weight;
  41.             edges_added++;
  42.         }
  43.         return ans;
  44.     }
  45. };
Advertisement
Add Comment
Please, Sign In to add comment