Advertisement
Guest User

Untitled

a guest
Feb 29th, 2020
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. #include<iostream>
  2. #include<vector>
  3. #include<queue>
  4. #define ll long long
  5. #define boost cin.tie(nullptr); cout.tie(nullptr); ios::sync_with_stdio(false);
  6. using namespace std;
  7. using graph = vector<vector<ll>>; //bits/stdc++.h
  8.  
  9. void bfs(ll s, const graph& gr, vector<ll>& lvls){
  10. lvls.assign(gr.size(),-1);
  11. lvls[s] = 0;
  12. queue<ll> q;
  13. q.push(s);
  14. while(!q.empty()){
  15. ll u = q.front();
  16. q.pop();
  17. for (int v:gr[u]){
  18. if(lvls[v] != -1){
  19. continue;
  20. }
  21. lvls[v] = lvls[u] + 1;
  22. q.push(v);
  23. }
  24. }
  25. }
  26.  
  27. ll get_path(ll s, ll f, const graph& gr){
  28. vector<ll> lvls;
  29. bfs(f, gr, lvls);
  30. if(lvls[s] == -1) return 0;
  31. if(lvls[f] == -1) return 0;
  32. vector<ll> path;
  33. path.push_back(s);
  34. while(path.back()!=f){
  35. ll lvl = lvls[path.back()];
  36. for (ll prev:gr[path.back()]){
  37. if (lvls[prev] == lvl - 1){
  38. path.push_back(prev);
  39. break;
  40. }
  41. }
  42. }
  43. return path.size();
  44. }
  45.  
  46. int main(){
  47. boost;
  48. ll m, n, k, s;
  49. vector<ll> lvls;
  50. scanf("%lld %lld %lld", &n ,&m ,&k);
  51. k --;
  52. graph gr(n);
  53. for(ll i = 0; i < m; ++i){
  54. ll u, v;
  55. scanf("%lld %lld",&u,&v);
  56. u--; v--;
  57. gr[u].push_back(v);
  58. gr[v].push_back(u);
  59. }
  60. bfs(k, gr, lvls);
  61. for (ll i: lvls)
  62. cout << i << ' ';
  63. return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement