Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- using ll = long long;
- using pii = pair<ll, int>;
- using tpii = tuple<int, int, int>;
- const int maxN = 1e5 + 5;
- const ll INF = 1e18 + 7;
- const int MOD = 1e9 + 7;
- int n, nTest;
- vector<pii> graph[maxN];
- ll d[maxN];
- void Dijkstra(int s, int t) {
- fill(d + 1, d + n + 1, INF);
- d[s] = 0;
- priority_queue<pii, vector<pii>, greater<pii>> pq;
- pq.push({0, s});
- while (!pq.empty()) {
- const auto [du, u] = pq.top(); pq.pop();
- if (d[u] > du) continue;
- for (const auto &[uv, v] : graph[u]) {
- if (d[v] > d[u] + uv) {
- d[v] = d[u] + uv;
- pq.push({d[v], v});
- }
- }
- }
- }
- int main() {
- #ifdef LOCAL
- freopen("in1.txt", "r", stdin);
- #else
- freopen("PWALK.inp", "r", stdin);
- freopen("PWALK.out", "w", stdout);
- #endif
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- cin >> n >> nTest;
- for (int i = 1; i <= n-1; i++) {
- int u, v, w; cin >> u >> v >> w;
- graph[u].push_back({w, v});
- graph[v].push_back({w, u});
- }
- for (int i = 1; i <= nTest; ++i) {
- int u, v; cin >> u >> v;
- Dijkstra(u, v);
- cout << d[v] << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment