intmain(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; if (!(cin >> n >> m)) return0; int s, e, A, B; cin >> s >> e >> A >> B;
constlonglong INF = (longlong)1e15; vector<vector<longlong>> d(n + 1, vector<longlong>(n + 1, INF)); for (int i = 1; i <= n; i++) d[i][i] = 0;
for (int i = 0; i < m; i++) { int u, v, w; cin >> u >> v >> w; if (w < d[u][v]) { d[u][v] = w; d[v][u] = w; // 无向边 } }
// 索道 0 费用 d[A][B] = d[B][A] = 0;
// Floyd for (int k = 1; k <= n; k++) { for (int i = 1; i <= n; i++) { if (d[i][k] == INF) continue; for (int j = 1; j <= n; j++) { longlong v = d[i][k] + d[k][j]; if (v < d[i][j]) d[i][j] = v; } } }
voiddijkstra(int start, vector<vector<pii>>& graph, vector<int>& dist){ int n = graph.size(); dist.assign(n, INT_MAX); priority_queue<pii, vector<pii>, greater<pii>> pq; dist[start] = 0; pq.push({0, start}); while (!pq.empty()) { int u = pq.top().second; int d = pq.top().first; pq.pop(); if (d != dist[u]) continue; for (auto& edge : graph[u]) { int v = edge.first; int w = edge.second; if (dist[u] + w < dist[v]) { dist[v] = dist[u] + w; pq.push({dist[v], v}); } } } }
intmain(){ int n, m; cin >> n >> m; int S, T; cin >> S >> T; int A, B; cin >> A >> B; vector<vector<pii>> graph(n+1); for (int i = 0; i < m; i++) { int u, v, t; cin >> u >> v >> t; graph[u].push_back({v, t}); graph[v].push_back({u, t}); } // 添加特殊索道:A和B之间双向0成本 graph[A].push_back({B, 0}); graph[B].push_back({A, 0}); vector<int> dist; dijkstra(S, graph, dist); cout << dist[T] << endl; return0; }