Advertisement
Guest User

Untitled

a guest
Apr 9th, 2020
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int n,m,a,b;
  5. long long d;
  6. bool conf[100010],confdfs[100010];
  7. vector<pair<long long, int>> adj[100010];
  8. set<pair<int, int>> prohib;
  9. priority_queue<pair<long long,pair<int,int>>> pq;
  10. vector<int> resp;
  11.  
  12. bool dfs(int pos){
  13.     confdfs[pos]=true;
  14.     resp.push_back(pos);
  15.     if(pos==1) return true;
  16.     for(int i=0;i<adj[pos].size();i++) if(!confdfs[adj[pos][i].second] && prohib.find({pos,adj[pos][i].second})==prohib.end()) if(dfs(adj[pos][i].second)) return true;
  17.     resp.pop_back();
  18.     return false;
  19. }
  20.  
  21. int main(){
  22.     scanf("%d %d", &n, &m);
  23.     for(int i=0;i<m;i++){
  24.         scanf("%d %d %lld", &a, &b, &d);
  25.         adj[a].push_back({d,b});
  26.         adj[b].push_back({d,a});
  27.     }
  28.     pq.push({0,{1,1}});
  29.     while(!pq.empty()){
  30.         int ant=pq.top().second.first;
  31.         int prox=pq.top().second.second;
  32.         d=pq.top().first;
  33.         pq.pop();
  34.         if(conf[prox]) continue;
  35.         conf[prox]=true;
  36.         prohib.insert({ant,prox});
  37.         prohib.insert({prox,ant});
  38.         for(int i=0;i<adj[prox].size();i++) pq.push({-d-adj[prox][i].first,{prox,adj[prox][i].second}});
  39.     }
  40.     if(dfs(0)){
  41.         printf("%d", resp.size());
  42.         for(int i=0;i<resp.size();i++) printf(" %d", resp[i]);
  43.         printf("\n");
  44.     }
  45.     else printf("impossible\n");
  46.     return 0;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement