1 条题解

  • 0
    @ 2025-3-15 22:10:41
    #include <bits/stdc++.h>
    
    using u32 = unsigned;
    using i64 = long long;
    using u64 = unsigned long long;
    using u128 = unsigned __int128;
    
    constexpr i64 inf = 1E18;
    
    int main() {
    	std::ios::sync_with_stdio(false);
    	std::cin.tie(nullptr);
    
    	int n, m, S, T;
    	std::cin >> n >> m >> S >> T;
    	int H;
    	std::cin >> H;
    
    	std::vector<std::vector<std::pair<int, i64>>> e(n + 1);
    	for (int i = 1; i <= m; i ++) {
    		int u, v;
    		i64 w;
    		std::cin >> u >> v >> w;
    		e[u].push_back({v, w});
    		e[v].push_back({u, w});
    	}
    
    	auto dijkstra = [&](int st) -> std::vector<i64> {
    		std::vector<i64> dist(n + 1, inf);
    		std::vector<bool> vis(n + 1);
    		std::priority_queue<std::pair<i64, int>, std::vector<std::pair<i64, int>>, std::greater<std::pair<i64, int>>> q;
    		q.push({0, st});
    		dist[st] = 0;
    
    		while (q.size()) {
    			auto [x, t] = q.top();
    			q.pop();
    
    			if (vis[t]) {
    				continue;
    			}
    			vis[t] = true;
    
    			for (auto [v, w] : e[t]) {
    				if (dist[v] > dist[t] + w) {
    					dist[v] = dist[t] + w;
    					q.push({dist[v], v});
    				}
    			}
    		}
    		return dist;
    	};
    
    	auto disA = dijkstra(S), disB = dijkstra(T);
    
    	std::cout << ((disA[H] == inf || disB[H] == inf) ? -1 : disA[H] + disB[H]) << "\n";
    
    
    	return 0;
    }
    
    • 1

    信息

    ID
    192
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    (无)
    递交数
    44
    已通过
    9
    上传者