Submission #965346

# Submission time Handle Problem Language Result Execution time Memory
965346 2024-04-18T11:05:04 Z MisterReaper Harbingers (CEOI09_harbingers) C++17
20 / 100
1000 ms 11860 KB
#include <bits/stdc++.h>
using i64 = long long;

constexpr int maxN = 1E5 + 5;
constexpr i64 INF = 1E18;

int N;
std::vector<std::pair<int, int>> adj[maxN];
int S[maxN], V[maxN], par[maxN], D[maxN];
i64 dp[maxN];

void dfs(int v) {
    [&] {
        int u = v;
        while(u != 1) {
            u = par[u];
            // std::cerr << u << ' ' << v << ' ' << dp[u] + 1LL * D[u] * V[v] + S[v] << '\n';
            dp[v] = std::min(dp[v], dp[u] + 1LL * (D[v] - D[u]) * V[v] + S[v]);
        }
    }();

    for(auto [u, w] : adj[v]) {
        if(u == par[v]) {
            continue;
        }
        D[u] = D[v] + w;
        par[u] = v;
        dfs(u);
    }
}

signed main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    std::cin >> N;
    for(int i = 1; i <= N - 1; i++) {
        int A, B, W;
        std::cin >> A >> B >> W;
        adj[A].emplace_back(B, W);
        adj[B].emplace_back(A, W);
    }

    for(int i = 2; i <= N; i++) {
        std::cin >> S[i] >> V[i];
    }

    std::fill_n(&dp[1], N, INF);
    dp[1] = 0;
    par[1] = 1;
    dfs(1);

    for(int i = 2; i <= N; i++) {
        std::cout << dp[i] << ' ';
    }
    std::cout << '\n';

    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 4956 KB Output is correct
2 Correct 11 ms 5068 KB Output is correct
3 Execution timed out 1052 ms 8788 KB Time limit exceeded
4 Execution timed out 1090 ms 9860 KB Time limit exceeded
5 Execution timed out 1014 ms 10448 KB Time limit exceeded
6 Execution timed out 1035 ms 11600 KB Time limit exceeded
7 Execution timed out 1054 ms 9556 KB Time limit exceeded
8 Execution timed out 1031 ms 11720 KB Time limit exceeded
9 Execution timed out 1054 ms 11860 KB Time limit exceeded
10 Execution timed out 1051 ms 11728 KB Time limit exceeded