#include #include #include using namespace std; int n, m, new_cost, old_cost; #define MaxN 500001 #define ULL unsigned long long #define INF 1LL << 62 vector >G[MaxN]; vector d; priority_queue, vector >, greater > >Q; int main() { cin >> n >> m >> new_cost >> old_cost; d = vector(n + 1, INF); for ( int i = 1, x, y; i <= m; ++i) { cin >> x >> y; G[x].push_back({y,new_cost}); G[y].push_back({x,new_cost}); if ( x == 1 && y == n ) old_cost = INF; } Q.push({0, 1}); d[1] = 0; while(Q.size()) { int dx = Q.top().first; int x = Q.top().second; Q.pop(); for ( const auto y : G[x] ) { int vx = y.first; int dvx = y.second; if ( d[vx] > d[x] + dvx ) { d[vx] = d[x] + dvx; Q.push({d[vx], vx}); } } } (d[n] < old_cost) ? cout << d[n] : cout << old_cost; return 0; }