Advertisement
Guest User

rijina

a guest
Mar 24th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.89 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. priority_queue < pair < int, int > > q;
  6. int n, m, st, en;
  7. vector < pair < int, int > > G[200020];
  8. int D[200020];
  9.  
  10. void go(int v)
  11. {
  12. for(int i = 0; i < G[v].size(); ++ i)
  13. {
  14. int to = G[v][i].first;
  15. if(D[to] > D[v] + G[v][i].second)
  16. {
  17. D[to] = D[v] + G[v][i].second;
  18. q.push(make_pair(- D[to], to));
  19. }
  20. }
  21. while(!q.empty())
  22. {
  23. int x = q.top().second;
  24. int y = -q.top().first;
  25. q.pop();
  26. if(D[x] == y)
  27. go(x);
  28. }
  29. }
  30.  
  31. int main()
  32. {
  33. scanf("%d %d %d %d", &n, &m, &st, &en);
  34.  
  35. for(int i = 0; i < m; ++ i)
  36. {
  37. int x, y;
  38. scanf("%d %d", &x, &y);
  39. G[x].push_back(make_pair(y, 0));
  40. G[y].push_back(make_pair(x, 1));
  41. }
  42. for(int i = 1; i <= n; ++ i)
  43. D[i] = 1e7;
  44. D[st] = 0;
  45. go(st);
  46.  
  47. if(D[en] == 1e7)
  48. printf("X\n");
  49. else
  50. printf("%d\n", D[en]);
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement