Submission #339101

#TimeUsernameProblemLanguageResultExecution timeMemory
339101lohachoHarbingers (CEOI09_harbingers)C++14
90 / 100
265 ms38220 KiB
#include <bits/stdc++.h> using namespace std; using LL = long long; vector<vector<LL>> cht((LL)1e5, vector<LL>(3)); vector<pair<vector<LL>, LL>> era; LL top; inline LL getc(vector<LL> A, vector<LL> B){ return (B[2] - A[2]) / (A[1] - B[1]) + ((B[2] - A[2]) % (A[1] - B[1]) > 0); } void push(LL A, LL B){ era.push_back({cht[top], top}); cht[top++] = {-(LL)1e18, A, B}; if(top >= 2){ cht[top - 1][0] = getc(cht[top - 2], cht[top - 1]); } if(top >= 3){ int s = 1, e = top - 1, mid; while(s < e){ mid = (s + e) >> 1; if(cht[mid][0] >= getc(cht[mid], cht[top - 1])){ e = mid; } else{ s = mid + 1; } } era.push_back({cht[s], top}); cht[s] = cht[top - 1], top = s + 1; if(top >= 2){ cht[top - 1][0] = getc(cht[top - 2], cht[top - 1]); } } else{ era.push_back({cht[top - 1], top}); } } LL get(LL x){ vector<LL> vc = {x + 1, -(LL)1e18, -(LL)1e18}; LL pos = lower_bound(cht.begin(), cht.begin() + top, vc) - cht.begin() - 1; return cht[pos][1] * x + cht[pos][2]; } void del(){ cht[top - 1] = era.back().first, top = era.back().second; era.pop_back(); cht[top - 1] = era.back().first, top = era.back().second; era.pop_back(); } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); LL N; cin >> N; vector<vector<pair<LL, LL>>> way(N); for(LL i = 0; i < N - 1; ++i){ LL a, b, c; cin >> a >> b >> c; --a; --b; way[a].push_back({b, c}), way[b].push_back({a, c}); } vector<pair<LL, LL>> val(N); for(LL i = 1; i < N; ++i){ cin >> val[i].first >> val[i].second; } vector<LL> sum(N), chk(N), dp(N); function<void(LL, LL)> dfs = [&](LL x, LL dis){ sum[x] = dis; chk[x] = 1; if(x){ dp[x] = get(val[x].second) + val[x].first + val[x].second * sum[x]; } else dp[x] = 0; push(-sum[x], dp[x]); for(auto&nxt:way[x]){ if(!chk[nxt.first]){ dfs(nxt.first, dis + nxt.second); } } del(); }; dfs(0, 0); for(LL i = 1; i < N; ++i){ cout << dp[i] << ' '; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...