Submission #547000

# Submission time Handle Problem Language Result Execution time Memory
547000 2022-04-09T06:38:09 Z Jomnoi Harbingers (CEOI09_harbingers) C++17
0 / 100
40 ms 65536 KB
#include <bits/stdc++.h>
#define DEBUG 0
using namespace std;

const int MAX_N = 1e5 + 10;

int S[MAX_N], V[MAX_N];
vector <pair <int, int>> adj[MAX_N];
long long ans[MAX_N];

long long divide(const long long &a, const long long &b) {
    return a / b - ((a ^ b) < 0 and a % b != 0);
}

class Line {
public :
    long long m, c;
    Line() {}
    Line(const long long &m_, const long long &c_) : m(m_), c(c_) {}

    long long dot(const long long &x) const {
        return m * x + c;
    }

    long long intersectX(const Line &o) const {
        return divide(o.c - c, m - o.m);
    }
};

class ConvexHullTrick {
public :
    deque <Line> hull;

    void addLine(const Line &f) {
        if(!hull.empty() and hull.back().m == f.m and hull.back().c == f.c) {
            hull.pop_back();
        }
        while(hull.size() >= 2 and f.intersectX(hull.back()) <= hull.back().intersectX(hull[hull.size() - 2])) {
            hull.pop_back();
        }
        hull.push_back(f);
    }

    long long query(const int &x) {
        if(hull.empty()) {
            return 0;
        }
        while(hull.size() >= 2 and hull[0].dot(x) <= hull[1].dot(x)) {
            hull.pop_front();
        }
        return hull[0].dot(x);
    }
}cht[MAX_N];

void dfs(const int &u, const int &p, const int &d) {
    if(u != 1) {
        cht[u] = cht[p];
        ans[u] = -cht[u].query(V[u]) + 1ll*d * V[u] + S[u];
    }
    cht[u].addLine(Line(d, -ans[u]));

    for(auto [v, w] : adj[u]) {
        if(v == p) {
            continue;
        }

        dfs(v, u, d + w);
    }
    cht[u].hull.clear();
}

int main() {
    cin.tie(0)->sync_with_stdio(0);
    int n;
    cin >> n;
    for(int i = 1; i <= n - 1; i++) {
        int u, v, d;
        cin >> u >> v >> d;
        adj[u].emplace_back(v, d);
        adj[v].emplace_back(u, d);
    }
    for(int i = 2; i <= n; i++) {
        cin >> S[i] >> V[i];
    }

    dfs(1, -1, 0);

    for(int i = 2; i <= n; i++) {
        cout << ans[i] << ' ';
    }
    return 0;
}
# Verdict Execution time Memory Grader output
1 Runtime error 38 ms 65536 KB Execution killed with signal 9
2 Runtime error 40 ms 65536 KB Execution killed with signal 9
3 Runtime error 37 ms 65536 KB Execution killed with signal 9
4 Runtime error 40 ms 65536 KB Execution killed with signal 9
5 Runtime error 34 ms 65536 KB Execution killed with signal 9
6 Runtime error 35 ms 65536 KB Execution killed with signal 9
7 Runtime error 40 ms 65536 KB Execution killed with signal 9
8 Runtime error 37 ms 65536 KB Execution killed with signal 9
9 Runtime error 39 ms 65536 KB Execution killed with signal 9
10 Runtime error 39 ms 65536 KB Execution killed with signal 9