#include using namespace std; typedef pair P; int N, M, L, T[2000]; vector

edges[2000]; vector dijkstra(int s){ vector dist(N); for(int i=0; i, greater

> que; que.push({0, s}); while(que.size()){ auto p = que.top(); que.pop(); int d = p.first, i = p.second; if(dist[i] < d) continue; for(auto& e : edges[i]){ int j = e.first, d2 = e.second + d; if(dist[j] > d2){ dist[j] = d2; que.push({d2, j}); } } } return dist; } int main(){ cin >> N >> M >> L; L--; for(int i=0; i> T[i]; for(int i=0; i> a >> b >> c; edges[a-1].push_back({b-1, c}); edges[b-1].push_back({a-1, c}); } auto distL = dijkstra(L); int64_t ans = 1e18; for(int s=0; s 0) save = max(save, dist[i] - distL[i]); ans = min(ans, result - save); } cout << ans << endl; return 0; }