Advertisement
Guest User

Untitled

a guest
Sep 29th, 2016
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.85 KB | None | 0 0
  1. #include <iostream>
  2. #include <deque>
  3. #include <vector>
  4. #include <climits>
  5. #include <cstring>
  6. using namespace std;
  7. #define lim 1000
  8. int w[lim][lim];
  9. int bfs(vector<int> *v,int root,int key){
  10. deque<int> d;
  11. int dist[lim+1];
  12. memset(dist,lim*lim,sizeof(int)*(lim));
  13. dist[root]=0;
  14. d.push_front(root);
  15. while(not d.empty()){
  16. int node=d.front();
  17. d.pop_front();
  18. for(int i=0;i<v[node].size();i++){
  19. if(dist[node]+w[node][v[node][i]]<dist[v[node][i]]){
  20. dist[v[node][i]]=dist[node]+w[node][v[node][i]];
  21. if(w[node][v[node][i]]==1)d.push_back(v[node][i]);
  22. else d.push_front(v[node][i]);
  23. }
  24. }
  25. }
  26. return dist[key];
  27. }
  28. int main(){
  29. int n,m,s,d; // n vertices, m edges
  30. cin>>n>>m;
  31. vector<int> v[lim];
  32. for(int i=0;i<m;i++){
  33. int x,y,z;
  34. cin>>x>>y>>z;
  35. w[x][y]=w[y][x]=z;
  36. v[x].push_back(y);
  37. v[y].push_back(x);
  38. }
  39. cin>>s>>d;
  40. cout<<bfs(v,s,d)<<endl;
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement