Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- long long int inf=2e9;
- using namespace std;
- using pii = pair<int,int> ;
- int main(){
- int n,m;
- cin >> n >> m;
- int x ,y ,z;
- cin >> x >> y >> z;
- int u1 ,v1 ,d1;
- vector<pii> g[n];
- for(int i=0;i<m;++i){
- scanf("%d%d%d",&u1,&v1,&d1);
- g[u1].push_back(make_pair(v1,d1));
- g[v1].push_back(make_pair(u1,d1));
- }
- vector<int> dist(n,inf);
- vector<bool> visit(n,false);
- priority_queue<pii, vector<pii>, greater<pii>> q;
- dist[x]=0;
- q.push({dist[x],x});
- while(!q.empty()){
- long long int u = q.top().second , d = q.top().first;
- q.pop();
- if(visit[u]){
- continue;
- }
- visit[u] = true;
- for(auto c : g[u]){
- long long int a = c.first;
- long long int b = c.second;
- if(!visit[a]&&dist[u]+b < dist[a]){
- dist[a]=dist[u]+b;
- q.push({dist[a],a});
- }
- }
- }
- if(dist[y]<=z){
- cout << y << " " << dist[y] << " 0";
- }
- else{
- vector<int> dist2(n,inf);
- vector<bool> visit2(n,false);
- priority_queue<pii, vector<pii>, greater<pii>> q2;
- dist2[y]=0;
- q2.push({dist2[y],y});
- while(!q2.empty()){
- long long int u2 = q2.top().second , d2 = q2.top().first;
- q2.pop();
- if(visit2[u2]){
- continue;
- }
- visit2[u2] = true;
- for(auto c : g[u2]){
- long long int a = c.first;
- long long int b = c.second;
- if(!visit2[a]&&dist2[u2]+b < dist2[a]){
- dist2[a]=dist2[u2]+b;
- q2.push({dist2[a],a});
- }
- }
- }
- long long int r=2e9;
- int t;
- for(int i=0;i<n;++i){
- if(i==x||i==y){
- continue;
- }
- if(dist[i]<=z&&dist2[i]<r){
- r=dist2[i];
- t=i;
- }
- }
- cout << t << " " << dist[t] << " " << dist2[t];
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement