Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define inf 2e18
- typedef long long ll;
- typedef pair<ll,pair<ll,ll>> pii;
- ll n,m,k,t;
- int main(){
- scanf("%lld %lld %lld %lld",&n,&m,&k,&t);
- vector<pair<ll,ll>> mp[n+1];
- for(ll i=0;i<m;i++){
- ll a,b,x;
- scanf("%lld %lld %lld",&a,&b,&x);
- mp[a].push_back({b,x});
- mp[b].push_back({a,x});
- }
- vector<vector<ll>> dist(n+1,vector<ll>(2,inf));
- vector<vector<bool>> visited(n+1,vector<bool>(2,false));
- priority_queue<pii,vector<pii>,greater<pii>> q;
- dist[1][0]=0;
- q.push({0,{0,1}});
- bool find =false;
- while(!q.empty()){
- ll u=q.top().second.second,key=q.top().second.first;
- q.pop();
- if(visited[u][key]){continue;}
- visited[u][key]=true;
- if(u==n){
- find = true;
- break;
- }
- for(auto x:mp[u]){
- ll v=x.first,w=x.second;
- if(dist[u][key]+w<dist[v][key]){
- dist[v][key]=dist[u][key]+w;
- q.push({dist[v][key],{key,v}});
- }
- if(key==0&&dist[u][0]+k<dist[v][1]){
- dist[v][1]=dist[u][0]+k;
- q.push({dist[v][1],{1,v}});
- }
- }
- }
- if(find&&(dist[n][1]<=t||dist[n][0]<=t)){
- if(dist[n][1]<=dist[n][0]){printf("Happy Winnie the Pooh :3\n%lld",dist[n][1]);}
- else{printf("Happy Winnie the Pooh :3\n%lld",dist[n][0]);}
- }
- else{printf("No Honey TT");}
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement