Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <deque>
- #include <vector>
- #include <climits>
- #include <cstring>
- using namespace std;
- #define lim 1000
- int w[lim][lim];
- int bfs(vector<int> *v,int root,int key){
- deque<int> d;
- int dist[lim+1];
- memset(dist,lim*lim,sizeof(int)*(lim));
- dist[root]=0;
- d.push_front(root);
- while(not d.empty()){
- int node=d.front();
- d.pop_front();
- for(int i=0;i<v[node].size();i++){
- if(dist[node]+w[node][v[node][i]]<dist[v[node][i]]){
- dist[v[node][i]]=dist[node]+w[node][v[node][i]];
- if(w[node][v[node][i]]==1)d.push_back(v[node][i]);
- else d.push_front(v[node][i]);
- }
- }
- }
- return dist[key];
- }
- int main(){
- int n,m,s,d; // n vertices, m edges
- cin>>n>>m;
- vector<int> v[lim];
- for(int i=0;i<m;i++){
- int x,y,z;
- cin>>x>>y>>z;
- w[x][y]=w[y][x]=z;
- v[x].push_back(y);
- v[y].push_back(x);
- }
- cin>>s>>d;
- cout<<bfs(v,s,d)<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement