Advertisement
Vince14

Small Multiple BFS

Feb 25th, 2023
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.09 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. #include <vector>
  7. #include <set>
  8. #include <map>
  9. #include <stack>
  10. #include <queue>
  11. #include <deque>
  12. #include <unordered_map>
  13. #include <numeric>
  14. #include <iomanip>
  15. using namespace std;
  16. #define pii pair<int, int>
  17. #define FAST ios_base::sync_with_stdio(false); cin.tie(NULL)
  18. const int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
  19. const int dl[2] = {1, -1};
  20. const int MOD = 1e9;
  21. const int MAX = 100005;
  22.  
  23.  
  24. int n, m, dist[MAX], par[MAX];
  25. vector<pii> v[MAX]; // {node, weight}
  26. priority_queue<pii> pq;
  27.  
  28. void init_dist(){
  29.     for(int i = 0; i <= n; i++){
  30.         dist[i] = 2e9;
  31.     }
  32.     dist[1] = 0;
  33. }
  34.  
  35. void Dijkstra(){
  36.     pq.push({-1, 1});
  37.     while(!pq.empty()){
  38.         int cur = pq.top().second;
  39.         int d = -pq.top().first;
  40.         // cout << cur << " " << d << "\n";
  41.         pq.pop();
  42.         for(pii a : v[cur]){
  43.             int nxt = a.first;
  44.             int nd = a.second;
  45.             if(d + nd < dist[nxt]){
  46.                 dist[nxt] = d + nd;
  47.                 par[nxt] = cur;
  48.                 pq.push({-(d + nd), nxt});
  49.             }
  50.         }
  51.     }
  52. }
  53.  
  54. void BFS(){
  55.     deque<pii> q;
  56.     q.push_front(make_pair(1, 1));
  57.     while(!q.empty()){
  58.         int cur = q.front().first;
  59.         int d = q.front().second;
  60.         q.pop_front();
  61.         if(dist[cur] != 0){
  62.             continue;
  63.         }
  64.         dist[cur] = d;
  65.         for(auto x : v[cur]){
  66.             int nxt = x.first;
  67.             int nd = x.second;
  68.             if(nd == 1){
  69.                 q.push_back(make_pair(nxt, d + nd));
  70.             }
  71.             else{
  72.                 q.push_front(make_pair(nxt, d + nd));
  73.             }
  74.         }
  75.     }
  76.     cout << dist[0];
  77. }
  78.  
  79.  
  80. int main() {
  81.     FAST;
  82.     //freopen("gravity.in", "r", stdin);
  83.     //freopen("gravity.out", "w", stdout);
  84.     cin >> n;
  85.     for(int i = 1; i <= n; i++){
  86.         v[i % n].push_back(make_pair((i + 1) % n, 1));
  87.     }
  88.     for(int i = 1; i <= n; i++){
  89.         v[i % n].push_back(make_pair((i * 10) % n, 0));
  90.     }
  91.     BFS();
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement