Advertisement
Josif_tepe

Untitled

Jan 25th, 2025
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. struct node {
  7.     int idx, shortest_path;
  8.     node () {}
  9.     node(int _idx, int _shortest_path) {
  10.         idx = _idx;
  11.         shortest_path = _shortest_path;
  12.     }
  13.     bool operator < (const node & tmp) const {
  14.         return shortest_path > tmp.shortest_path;
  15.     }
  16. };
  17. vector<int> graph[11];
  18.  
  19. int main()
  20. {
  21.     int n, V;
  22.     cin >> n >> V;
  23.    
  24.     vector<int> portal(n);
  25.     for(int i = 0; i < n; i++) {
  26.         cin >> portal[i];
  27.         graph[portal[i]].push_back(i);
  28.     }
  29.    
  30.     priority_queue<node> pq;
  31.     pq.push(node(0, 0));
  32.    
  33.     vector<bool> visited(n, false);
  34.     vector<bool> visited_portal(11, false);
  35.    
  36.     while(!pq.empty()) {
  37.         node c = pq.top();
  38.         pq.pop();
  39.        
  40.         if(c.idx == n - 1) {
  41.             cout << c.shortest_path << endl;
  42.             break;
  43.         }
  44.         if(visited[c.idx]) {
  45.             continue;
  46.         }
  47.         visited[c.idx] = true;
  48.        
  49.         if(c.idx + 1 < n and !visited[c.idx + 1]) {
  50.             pq.push(node(c.idx + 1, c.shortest_path + 1));
  51.         }
  52.         if(c.idx - 1 >= 0 and !visited[c.idx - 1]) {
  53.             pq.push(node(c.idx - 1, c.shortest_path + 1));
  54.         }
  55.        
  56.         if(!visited_portal[portal[c.idx]]) {
  57.             for(int i = 0; i < (int) graph[portal[c.idx]].size(); i++) {
  58.                 int teleport = graph[portal[c.idx]][i];
  59.                
  60.                 if(!visited[teleport]) {
  61.                     pq.push(node(teleport, c.shortest_path + V));
  62.                 }
  63.             }
  64.             visited_portal[portal[c.idx]] = true;
  65.         }
  66.        
  67.     }
  68.    
  69.     return 0;
  70. }
  71.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement