Submission #597141

# Submission time Handle Problem Language Result Execution time Memory
597141 2022-07-15T14:47:44 Z Valaki2 Dynamic Diameter (CEOI19_diameter) C++14
18 / 100
668 ms 10604 KB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define pb push_back

const int maxn = 1e5;

struct edge {
    int to, wei;
    edge() : to(0), wei(0) {}
    edge(int to_, int wei_) :
        to(to_), wei(wei_) {}
};

int n, q, w;
vector<int> par_of;
vector<int> wei;
vector<int> best_dist;
vector<int> ans;
multiset<int> m;

void upd_ans(int cur) {
    if(m.find(ans[cur]) != m.end()) {
        m.erase(m.find(ans[cur]));
    }
    ans[cur] = wei[2 * cur] + best_dist[2 * cur] + wei[2 * cur + 1] + best_dist[2 * cur + 1];
    m.insert(ans[cur]);
}

int query(int cur) {
    int res = 0;
    while(cur > 0) {
        best_dist[cur] = max(best_dist[2 * cur] + wei[2 * cur], best_dist[2 * cur + 1] + wei[2 * cur + 1]);
        upd_ans(cur);
        cur /= 2;
    }
    res = *m.rbegin();
    return res;
}

void calc_best_dist(int cur) {
    if(cur > n) {
        return;
    }
    calc_best_dist(2 * cur);
    calc_best_dist(2 * cur + 1);
    best_dist[cur] = max(best_dist[2 * cur] + wei[2 * cur], best_dist[2 * cur + 1] + wei[2 * cur + 1]);
}

void solve() {
    cin >> n >> q >> w;
    par_of.assign(n - 1, 0);
    wei.assign(1 + 2 * n + 1, 0);
    best_dist.assign(1 + 2 * n + 1, 0);
    ans.assign(1 + n, 0);
    for(int i = 0; i < n - 1; i++) {
        int a, b, c;
        cin >> a >> b >> c;
        if(a > b) {
            swap(a, b);
        }
        par_of[i] = b;
        wei[b] = c;
    }
    calc_best_dist(1);
    for(int i = 1; i <= n; i++) {
        upd_ans(i);
    }
    int last = 0;
    while(q--) {
        int d, e;
        cin >> d >> e;
        d = (d + last) % (n - 1);
        e = (e + last) % w;
        // ----- changable -----
        wei[par_of[d]] = e;
        int result = query(par_of[d] / 2);
        // ----- changable -----
        cout << result << "\n";
        last = result;
    }
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    solve();
    return 0;
}
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 10 ms 340 KB Output is correct
3 Correct 48 ms 684 KB Output is correct
4 Correct 91 ms 924 KB Output is correct
5 Correct 6 ms 980 KB Output is correct
6 Correct 21 ms 1172 KB Output is correct
7 Correct 78 ms 1396 KB Output is correct
8 Correct 142 ms 2636 KB Output is correct
9 Correct 20 ms 4564 KB Output is correct
10 Correct 39 ms 4716 KB Output is correct
11 Correct 113 ms 5428 KB Output is correct
12 Correct 219 ms 6280 KB Output is correct
13 Correct 48 ms 8956 KB Output is correct
14 Correct 83 ms 9056 KB Output is correct
15 Correct 154 ms 9732 KB Output is correct
16 Correct 265 ms 10604 KB Output is correct
17 Correct 668 ms 10388 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 588 ms 8812 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -